《2022年2022年链表创建插入修改删除及队列使用 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年链表创建插入修改删除及队列使用 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、 程序开发环境1. 操作系统: Windows all。2. 开发工具: Microsoft Visual C+6.0 。3. 其他:无。二、 程序运行环境1. 操作系统: Windows all。2. 其他:无。三、 提交考试文档用 RAR 压缩软件,将下列文件压缩为一个文件, 取名 “学号_姓名_中期考试文档 .RAR” 。1. 本实验报告 。2. 源程序 (*.C 或*.CPP 等文件): 创建“源程序”文件夹,源程序放里面。3. 执行程序 (*.EXE 文件): 创建“执行程序”文件夹,*.EXE 文件放里面。4. readme.txt:逐条详细说明本程序运行时,所需要的其他文件及
2、存放路径。四、 软件系统说明1. 绘制程序的 系统流程图 ,即各个功能模块的调用流程图。注:不是各个功能模块内部的实现流程。case1: 链表操作case2: 栈操作case3 :创建十字链表判断栈空2. 贴图:程序运行时的 主界面截图 (JPG图片格式)。main case1 case2 case3 Linkstack *inistack(linkstack *top) Linkstack *push(linkstack *top,int x) Linkstack *quit(linkstack *top) int gettop(linkstack *top) int empty(links
3、tack *top) void tenTotwo(int n) OLNode *setlink() 随机产生链表输入个数查找删除找出的数执行转换栈的初始化进栈取栈顶元素退栈输入、存储输出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 3. 结合流程图和主界面, 逐个说明各个功能模块 ,如下:1.链表操作该模块会自动产生链表中data中的数据,并在产生之前询问要产生的个数。产生之后可手动输入一个数程序会自动查找该数是否包含在随机
4、产生的数当中若包含则返回该数所在的位置和包含该数的个数,然后询问用户是否要删除所查找出来的这些数,若选择删除则删除这些数后再输出删除后的链表。void main() NODE *head,*a,*p,*q,*j; int n; head=new node; a=head; head-next=NULL; coutn; double x; srand(time(0); /随机产生链表x=rand()%100; for(int i=0;idata=x; p-next=a-next; a-next=p; a=p; unsigned srand(time(0); x=rand()%100; 名师资料总
5、结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - coutnext; /输出随机产生的链表while(q!=NULL) coutdatanext; coutendl; int m,k=0,num=0; /查找 m 这个数是否在这个链表中并且出现了几次coutm; /查找用户输入的数是否在随机产生的链表里j=head-next; while(j!=NULL) k+; if(j-data=m) cout找到data 是第 k 个next; c
6、out共找到 num 个endl; if(0=num) cout查无此数! endl; cout没有数要删除! endl; /询问用户是否进行删除操作else coutch; if(ch1=ch|ch2=ch) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - do a=head; q=head-next; while(q!=NULL)&(q-data!=m) a=q; q=q-next; if(q=NULL) cout已删除完
7、毕! next=q-next; delete (q); while(q!=NULL); /删除后输出删除后的数组coutnext; while(q!=NULL) coutdatanext; coutendl; else cout你选择了不删除这些数!next=NULL; return top; Linkstack *push(linkstack *top,int x) /进栈 linkstack *s=new linkstack; s-data=x; s-next=top-next; top-next=s; return top; Linkstack *quit(linkstack *top)
8、 /退栈 linkstack *s=top-next; if(s!=NULL) top-next=s-next; delete s; return top; int gettop(linkstack *top) /取栈顶元素 if(top-next!=NULL) return(top-next-data); else return NULL; int empty(linkstack *top) if(top-next=NULL) return 1; else return 0; void tenTotwo(int n) /十进制转换为二进制名师资料总结 - - -精品资料欢迎下载 - - -
9、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - int x; linkstack *top=NULL; top=inistack(top); /栈的初始化while(n!=0) int j=n%2; top=push(top,j); /进栈n=n/2; while(!empty(top) /判断栈非空 x=gettop(top); /取栈顶元素coutx; top=quit(top); /退栈 coutendl; void main() int n; coutn; cout十进制
10、数 n 的二进制为 ; tenTotwo(n); 3.创建一个十字链表用户输入十字链表所对应的三元数组程序输出输入的十字链表typedef struct OLNode int row,col; union struct OLNode *next; /表头结点 next int value; /元素结点 value uval; struct OLNode *down,*right; pOlink; OLNode *setlink() /建立稀疏矩阵的十字链表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -
11、- - - - 第 6 页,共 10 页 - - - - - - - - - int m,n,len,s,row,col,value; pOlink *p,*q,*a100,*hm; coutmnlen; if(mn) s=m; else s=n; hm=new pOlink; hm-row=m; hm-col=n; a0=hm; for(row=1;rowrow=0; p-col=0; p-down=p; p-right=p; arow=p; arow-1-uval.next=p; as-uval.next=hm; for(int x=1;x=len;x+) cout请输入一个三元组( ro
12、w,col,value)rowcolvalue; /输入一个三元组/生成一个三元组结点p=new pOlink; p-row=row; p-col=col; p-uval.value=value; /将 p 插入第 row 链表中q=arow; while(q-down!=arow)&(q-down-coldown; p-down=q-down; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - q-down=p; /将 p 插
13、到第 col 列链表中q=acol; while(q-right!=acol)&(q-right-rowright; p-right=q-right; q-right=p; return hm; void main() pOlink *p,*q; pOlink *hm=NULL; hm=setlink(); cout十字链表为 uval.next; while(p-uval.next!=hm-uval.next) q=p-down; while(q!=p) cout(row col uval.valuedown; coutuval.next; 五、 程序的测试为保证程序的正确性或存在较少Bug
14、,需要进行各种测试。针对各个功能模块,逐一给出测试内容、方案、结论如下:1. 链表操作:产生链表、查找、删除1) 测试内容根据该模块的功能、输入输出、参数等,需要测试以下内容:产生链表:输入一个int 型整数产生所对应元素的个数。查找:输入一个数查找是否存在于随机产生的元素中。若找到有则询问是否删除。2) 测试方案名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 2. 用栈进行二进制转换1)测试内容输入一个十进制整数输出转换后的
15、二进制数2)测试方案3. 创建十字链表1)测试内容输入十字链表所对应的三元数组然后输出用三元数组表示的矩阵2)测试方案名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 六、 收获与建议1. 我的收获数据结构方面收获最初做链表是都是直接写程序根本没有考虑到结构的可读性与美观一直就继续往下写,但到后来注意到这个问题以后才开始懂得使用函数调用。算法设计方面收获最初看到十字链表时根本就无从下手,特别是十字链表的最外的一行一列不知道怎样初始化,但是通过这次实际查阅资料编写以后对这个有了一定的认识。编程技术方面收获学习 C+这么久以来就没有用过struct,也不知道怎样用但是这次的编程基本上都用到了它,着用加深了我对C+知识的运用。2. 我的建议无名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -