C语言链表程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

南昌航空大学数学与信息科学学院实验报告课程名称:链表的综合操作实验名称:制作综合性多媒体课件实验类型:验证性□综合性■设计性□实验室名称:数学实验室班级学号:08071213学生姓名:刘哲强任课教师(教师签名):成绩:实验日期:南昌航空大学数学与信息科学学院实验报告第1页一、实验目的链表是一种常见而重要的数据结构,进行本次实验过后,应基本掌握链表的结构原理、如何创建链表、如何输出结点数据、如何插入结点、如何删除结点。二、实验用仪器设备、器材或软件环境win-tcMicrosoftVisualC++2008ExpressEditionMicrosoftoffice三、实验原理、方案设计、程序框图、预编程序等通过所学的知识,进行创建链表,打印链表,插入结点,删除结点。结合课本上的函数,进行改进,得到自己的一个程序。和课本上的程序思路都是一样的,只是传递的数据类型和个数可能会不一样,而且还需创建一个菜单函数,用来提示我们要进行的操作,让使用者更加清晰地使用程序。南昌航空大学数学与信息科学学院实验报告第2页开始声明两个结构体指针变量head,lnew和长整的del_num开始for循环for(;;)swich(menubar())menubar()=0?menubar()=1?menubar()=2?menubar()=3?menubar()=4?退出执行creat()函数break;执行打印print()函数break;请输入要插入的结点的信息,先输入学号输入你想删除的结点的学号如果输入的学号lnew-num!=0输入的学号进行判断del_num!=0break;开始while循环lnew-num!=0break;再输入电话,地址,邮编执行del()函数head=del(head,del_num);执行insert()函数head=insert(head,lnew);判断输入的学号lnew-num!=0再输入电话、地址、邮编NYYNNNNYYYYNYNYNYN输出“谢谢您使用”并先执行getch()函数再执行exit(0)函数退出for循环结束NY主函数main()的流程图南昌航空大学数学与信息科学学院实验报告第3页开始1=n并开辟一个长度为LEN的内存空间并输入第一位同学的学号对刚输入的学号进行判断p1-num!=0head进行初始化NULL=head;再输入此同学的电话、地址、邮编开始while循环p1-num!=0?p2-next=NULL;returnhead;n=n+1;n==1p2-next=p1;p2=p1;判断下一个输入的学号p1-num!=0?再输入电话、地址、邮编head=p1;开始输出结点个数head=p判断链表是否为空head!=NULL?打印“此链表为空表”先打印标题学号、电话、地址、邮编p!=NULL为循环所要满足的条件?打印表的格式即加横线——竖线||使输出的链表更加清晰打印结点里面的信息即学号、电话、地址、邮编YNYNYNYNYNNY结束结束creat()函数流程图print()函数流程图南昌航空大学数学与信息科学学院实验报告第4页开始声明两个结构休指针变量p1,p2;head!=NULL?p1=head;num!=p1-num&&p1-next!=NULL?输出“链表是空的!”returnhead;num==p1-num?返回头指针returnhead;p2=p1;p1=p1-next;输出”numnotbeenfound!”p1==head?输出“删除:num”p2-next=p1-next;结束YNYNYNYNhead=p1-next;函数传递过来的值:头指针head和要删除的学号num声明三个结构体指针变量p0,p1,p2p0=lnew;p1=headhead==NULL?结点数加1n=n+1;返回头指针returnhead;head=p0;p0-next=NULL;p0-nump1-num&&p1-next!=NULLp0-num=p1-num?p2=p1;p1-next=p0;p0-next=NULL;head==p1?p0-next=p1;p2-next=p0;函数传递过来的值有:链表头指针head和要插入的结点的指针lnewYNNYYNYhead=p0;N开始结束del()函数流程图insert()函数流程图南昌航空大学数学与信息科学学院实验报告第5页开始声明两个整型变量c和flag;flagc0||c4返回C的值returnc;n==0&&c!=0&&c!=4flag=0;输入“请输入0~4之间的数”输出“在建立链表之前请先输入0建立链表”NYNYYN结束menubar()函数流程图南昌航空大学数学与信息科学学院实验报告第6页所有的程序代码:#includestdio.h#includemalloc.h#defineNULL0#defineLENsizeof(structstudent)#includeconio.h#includestring.h#includestdlib.hstructstudent{longnum;floattel;charadd[10];longzip;structstudent*next;};intn;/*n为全局变量,用于统计结点的个数*//*―――――――---――――-―――creat函数――――――----――――――――*/structstudent*creat()/*创建creat函数用于建立链表*/{structstudent*head;structstudent*p1,*p2;n=0;p2=(structstudent*)malloc(LEN);/*开辟一个大小为LEN的内存单元*/p1=p2;printf(请输入学号:);scanf(%ld,&p1-num);/*输入学号*/if(p1-num!=0){printf(请输入电话:);scanf(%f,&p1-tel);/*输入电话号码*/printf(请输入地址:);scanf(%s,p1-add);/*输入地址*/printf(请输入邮编:);scanf(%ld,&p1-zip);/*输入邮编*/printf(ok!请输入下一个结点的信息\n);/*提示已经输好了一位同学的信息*/}head=NULL;while(p1-num!=0)/*如果输入的学号不是0,刚继续输入其余的同学的信息*/{n=n+1;if(n==1)head=p1;elsep2-next=p1;p2=p1;p1=(structstudent*)malloc(LEN);printf(请输入学号:);scanf(%ld,&p1-num);if(p1-num!=0){printf(请输入电话:);scanf(%f,&p1-tel);printf(请输入地址:);scanf(%s,p1-add);printf(请输入邮编:);scanf(%ld,&p1-zip);printf(ok!请输入下一个结点的信息\n);南昌航空大学数学与信息科学学院实验报告第7页}}p2-next=NULL;returnhead;/*结束creat函数*/}/*―――――――---――――-―――print函数――――――----――――――――*/voidprint(structstudent*head)/*开始打印函数*/{structstudent*p;printf(\nNow,These%drecordsare:\n,n);p=head;if(head!=NULL)/*如果链表不是空,则打印每个结点信息*/{printf(-------------|------------|-------------|--------\n);printf(学号|电话|地址|邮编\n);do{printf(-------------|------------|-------------|--------\n);printf(0%-12ld|%-13.0f|%-13s|%-13ld\n,p-num,p-tel,p-add,p-zip);p=p-next;}while(p!=NULL);printf(-------------|------------|-------------|--------\n);}elseprintf(链表是空的!\n);/*如果链表是空表,刚提示这个链表是空表*/}/*结束print函数*//*―――――――---――――---―――del函数――――――-----――――――――*/structstudent*del(structstudent*head,longnum)/*开始创建del函数,用于删除结束*/{structstudent*p1,*p2;if(head==NULL){printf(\n链表是空的!\n);returnhead;}/*用于检查链表是否为空,如果为空,刚提示这个链表为空表*/p1=head;while(num!=p1-num&&p1-next!=NULL){p2=p1;p1=p1-next;}if(num==p1-num)/*找到对应的结点*/{if(p1==head)head=p1-next;elsep2-next=p1-next;printf(删除:0%ld\n,num);n=n-1;}elseprintf(0%ld没有找到!\n,num);/*没有打到对应的结点,则提示没有找到*/returnhead;}/*―――――――---――――-―――insert函数――――――----――――――――*/structstudent*insert(structstudent*head,structstudent*lnew)/*创建insert函数,用于插入结点,返回值为一个指针*/{structstudent*p0,*p1,*p2;南昌航空大学数学与信息科学学院实验报告第8页p1=head;p0=lnew;if(head==NULL){head=p0;p0-next=NULL;}/*结果链表为空表,刚把插入的结点指针给头指针,结点的next为空*/else{while((p0-nump1-num)&&(p1-next!=NULL))/*寻找该插入的位置*/{p2=p1;p1=p1-next;}if(p0-num=p1-num)/*找到了该插入的位置*/{if(head==p1)head=p0;/*放在最前面*/elsep2-next=p0;/*结点插到p1,p2之间*/p0-next=p1;}else{p1-next=p0;p0-next=NULL;}/*结点插到最后*/}n=n+1;returnhead;/*结点数加*/}/*结束insert函数的建立*//*―――――――---――――-―――menubar函数――――――----――――――――*/intmenubar()/*创建菜单函数*/{intflag=1;/*用来做记号*/intc;/*用来存储使用者选择的菜单代号*/printf(\n\n**************链表综合处理***************\n);printf(0:创建链表----\n);printf(1:输出链表\n);printf(2:插入结点菜单\n);printf(3:删除结点\n);printf(4:退出----\n);printf(*************************************************);printf(\n请根据你想执行的命令,输入对应的0~4的数:);scanf(%d,&c);/*接收使用都所输入的代号*/while(flag)/*flag用来标记,如果为链表为空,或者使用者第一次输入的不是0或者不是4,则需要重新输入*/{if(n==0&&c!

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功