实验一线性表[链式存储结构].doc

上传人:hs****ma 文档编号:562789493 上传时间:2024-01-05 格式:DOC 页数:4 大小:40.50KB
返回 下载 相关 举报
实验一线性表[链式存储结构].doc_第1页
第1页 / 共4页
实验一线性表[链式存储结构].doc_第2页
第2页 / 共4页
实验一线性表[链式存储结构].doc_第3页
第3页 / 共4页
实验一线性表[链式存储结构].doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实验一线性表[链式存储结构].doc》由会员分享,可在线阅读,更多相关《实验一线性表[链式存储结构].doc(4页珍藏版)》请在金锄头文库上搜索。

1、实验一线性表一目的与要求 本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。二例题 问题描述 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。输入初始字符串,插入位置,插入字符,删除字符。输出已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。存储结构采用链式存储结构算法的基本思想建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置

2、,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。参考源程序#define NULL 0typedef struct node char a; struct node *link;node,*nodelink;void readlink(nodelink head) nodelink p,q; char c; p=head; printf(Input a linktable(a string):); scanf

3、(%c,&c); if (c=n) printf(This string is empty。); while(c!=n) q=(nodelink)malloc(sizeof(node); q-a=c; p-link=q; p=q; scanf(%c,&c); p-link=NULL;void writelink(nodelink head) nodelink q; if (head-link=NULL) printf( This link is empty。n); for(q=head-link;q;q=q-link) printf(%c,q-a); printf(n); int insert

4、(nodelink head,char k1,char k2) nodelink p,q; p=head-link; while(p-a!=k1&p) p=p-link; if(p) q=(nodelink)malloc(sizeof(node); q-a=k2; q-link=p-link; p-link=q; return 1; else printf(There is no %cn,k1); return 0; int delete(nodelink head,char k) nodelink p,q; q=head; p=head-link; while(p-a)!=k)&p) q=q

5、-link; p=p-link; if(p) q-link=p-link; return 1; else printf(There is no %cn,k); return 0; void opside(nodelink head) nodelink p,q; p=head-link; while(p-link) q=p-link; p-link=q-link; q-link=head-link; head-link=q; main() char k1,k2,k3; nodelink head; head=(nodelink)malloc(sizeof(node); head-link=NUL

6、L; readlink(head); if (head-link!=NULL) printf(Build link is :); writelink(head); if (head-link!=NULL) printf(Please input a char you want to insert after:); k1=getch(); printf(%cn,k1); printf(Please input a char you want to insert:); k2=getch(); printf(%cn,k2); if (insert(head,k1,k2) printf(After %

7、c insert %c,link is:,k1,k2); writelink(head); printf(Please input a char you want to delete:); k3=getch(); printf(%cn,k3); if (delete(head,k3) printf(after delete %c,link is:,k3); writelink(head); if (head-link!=NULL) printf(Opsite result is :); opside(head); writelink(head); free(head); 运行情况Input a

8、 linktable(a string):lopuiBuild link is :lopuiPlease input a char you want to insert after:pPlease input a char you want to insert:yAfter p insert y,link is:lopyuiPlease input a char you want to delete:pafter delete p,link is:loyuiOpsite result is :iuyol三实习题 1设顺序表A中的数据元素递增有序,试写一程序,将x插入到顺序表的适当位置上,使该表仍然有序。2用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+anxn(其中aI为非零系数),用单链表hb 存储多项式B(x )=b0+b1x1+b2x2+bmxm(其中bj为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。试写出程序。 3设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,如此重复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,m,s,求出按出列次序得到的n个人员的顺序表。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号