c语言显示屏程序链表,C语言链表程序

《C语言链表程序》由会员分享,可在线阅读,更多相关《C语言链表程序(15页珍藏版)》请在人人文库网上搜索。

1、南昌航空大学数学与信息科学学院实 验 报 告课程名称: 链表的综合操作 实验名称: 制作综合性多媒体课件 实验类型: 验证性 综合性 设计性实验室名称: 数学实验室 班级学号: 学生姓名: 刘哲强 任课教师(教师签名): 成 绩: 实验日期: 一、实验目的链表是一种常见而重要的数据结构,进行本次实验过后,应基本掌握链表的结构原理、如何创建链表、如何输出结点数据、如何插入结点、如何删除结点。二、实验用仪器设备、器材或软件环境win-tcMicrosoft Visual C+ 2008 Express EditionMicrosoft office三、实验原理、方案设计、程序框图、预编程序等通过所。

2、学的知识,进行创建链表,打印链表,插入结点,删除结点。结合课本上的函数,进行改进,得到自己的一个程序。和课本上的程序思路都是一样的,只是传递的数据类型和个数可能会不一样,而且还需创建一个菜单函数,用来提示我们要进行的操作,让使用者更加清晰地使用程序。所有的程序代码:#include#include#define NULL 0#define LEN sizeof(struct student)#include#include#includestruct student long num;float tel;char add10;long zip;struct student *next;int 。

3、n; /* n 为全局变量,用于统计结点的个数*/*-creat函数-*/ struct student *creat() /* 创建creat函数用于建立链表*/ struct student *head;struct student *p1,*p2;n=0;p2=(struct student *)malloc(LEN); /* 开辟一个大小为LEN的内存单元*/p1=p2; printf(请输入学号:);scanf(%ld,&p1-num); /* 输入学号*/if(p1-num!=0) printf(请输入电话:);scanf(%f,&p1-tel); /* 输入电话号码*/print。

4、f(请输入地址:);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;else p2-next=p1;p2=p1;p1=(struct student *)malloc(LEN);printf(请输入学号:);scanf(%ld,&p1-num);if(p1-。

5、num!=0) printf(请输入电话:);scanf(%f,&p1-tel);printf(请输入地址:);scanf(%s,p1-add);printf(请输入邮编:);scanf(%ld,&p1-zip);printf(ok! 请输入下一个结点的信息n);p2-next=NULL;return head; /* 结束creat函数*/*-print函数-*/void print(struct student *head) /* 开始打印函数*/ struct student *p;printf(n Now,These %d records are:n,n);p=head;if(head。

6、!=NULL) /* 如果链表不是空,则打印每个结点信息*/ printf(-|- |-|-n);printf(学号 |电话 |地址 |邮编 n);do printf(-|- |-|-n);printf(0%-12ld|%-13.0f|%-13s|%-13ldn,p-num,p-tel,p-add,p-zip);p=p-next;while(p!=NULL);printf(-|- |-|-n);else printf(链表是空的!n); /* 如果链表是空表,刚提示这个链表是空表*/ /* 结束print函数*/*-del函数-*/struct student *del(struct stud。

7、ent *head,long num) /* 开始创建del函数,用于删除结束*/ struct student *p1,*p2;if(head=NULL) printf(n链表是空的!n); return head; /* 用于检查链表是否为空,如果为空,刚提示这个链表为空表*/p1=head;while(num!=p1-num & p1-next!=NULL)p2=p1;p1=p1-next;if(num=p1-num) /* 找到对应的结点*/ if(p1=head) head=p1-next;else p2-next=p1-next;printf(删除:0%ldn,num);n=n-1。

8、;else printf(0%ld 没有找到!n,num); /* 没有打到对应的结点,则提示没有找到*/return head;/*-insert函数-*/struct student *insert(struct student *head,struct student *lnew) /* 创建insert函数,用于插入结点,返回值为一个指针*/ struct student *p0,*p1,*p2;p1=head;p0=lnew;if(head=NULL) head=p0;p0-next=NULL; /* 结果链表为空表,刚把插入的结点指针给头指针,结点的next为空*/else whi。

9、le(p0-nump1-num) & (p1-next!=NULL) /* 寻找该插入的位置*/p2=p1;p1=p1-next;if(p0-numnum) /* 找到了该插入的位置*/if(head=p1) head=p0; /* 放在最前面*/else p2-next=p0; /* 结点插到p1,p2之间*/p0-next=p1;else p1-next=p0;p0-next=NULL; /* 结点插到最后*/n=n+1;return head; /* 结点数加*/ /* 结束insert函数的建立*/*-menubar函数-*/int menubar() /*创建菜单函数*/ int f。

10、lag=1; /*用来做记号*/int c; /*用来存储使用者选择的菜单代号*/printf(nn* 链表综合处理 *n);printf(0:创建链表 -n);printf(1:输出链表n);printf(2:插入结点 菜单n);printf(3:删除结点n);printf(4:退出 -n);printf(*);printf(n请根据你想执行的命令,输入对应的04的数:);scanf(%d,&c); /*接收使用都所输入的代号*/while(flag) /*flag用来标记,如果为链表为空,或者使用者第一次输入的不是0或者不是4,则需要重新输入*/if(n=0&c!=0&c!=4)print。

11、f(在建立链表之前请先输入建立链表n);printf(n请输入04的数:);scanf(%d,&c);flag=1;else flag=0 ;while( c4 ) /*表示链表已经创建,但输入的不能大于4,或者小于0*/ printf(n请输入4的数:);scanf(%d,&c);return c; /*返回c的值*/*-main函数-*/void main() /*开始主函数*/ struct student *head,*lnew;long del_num;for(;) /*开始for循环*/ switch (menubar() case 0:printf(请输入创建的链表的结点的信息:。

12、n);head=creat();break;case 1:print(head);break;case 2: printf(n请输入要插入的结点的信息:n);lnew=(struct student *)malloc(LEN);printf(请输入学号:);scanf(%ld,&lnew-num);if(lnew-num!=0) printf(请输入电话:);scanf(%f,&lnew-tel);printf(请输入地址:);scanf(%s,lnew-add);printf(请输入邮编:);scanf(%ld,&lnew-zip);while(lnew-num!=0) head=inser。

13、t(head,lnew);print(head);printf(请输入下一个要插入的结点的信息:n);lnew=(struct student *)malloc(LEN);printf(请输入学号:);scanf(%ld,&lnew-num);if(lnew-num!=0) printf(请输入电话);scanf(%f,&lnew-tel);printf(请输入地址:);scanf(%s,lnew-add);printf(请输入邮编:);scanf(%ld,&lnew-zip);printf(ok! 请输入下一个要插入的结点的信息n); break;case 3:printf(n请输入你想删除。

14、的结点的学号:);scanf(%ld,&del_num);while(del_num!=0) head=del(head,del_num);print(head);printf(n请输入你想删除的结点的学号:);scanf(%ld,&del_num);break;case 4: system(CLS);printf(谢谢您的使用nnnn);getch();exit(0); /*退出for循环*/ /*结束主函数*/图1使用链表的知识及课本上的creat 、print、del、insert、main函数基本构成我所做的链表。学号我用长整型来存储,在输出的时候在其前面多加一个0就可以了;电话号码,。

15、我则选择了浮点型的数据,在打印的时候,不要打印小数点后面的数字就可以了;地址我用字符数组来存储,用来存储四个汉字;邮编我则用长整型存储。开始运行程序: 如果第一次输入的不是0(创建链表) 或者不是4(退出程序),程序则会提示你要先创建链表,即最先要输入0先创建链表:(图1)输入结点的 图2学号、电话、地址、邮编,输完一个同学的所有的信息后,程序会提示你输入下一个结点的信息,直到你输入的学号为0,程序就会返回主菜单。我先按老师提出的要求输入10个同学的信息。图2为刚开始建立链表时的运行情况。图4图3图3为创建链表时所输入的结点的信息,总共输入了10个结点的信息,输入完10个同学的信息后,再输入学。

16、号时输入0,则会结束创建链表函数,程序就会返回主菜单。再输入1,则会执行打印函数。将刚刚输入的所有的结点的信息打印到终端。见图4图5现在再执行2(插入结点): 我先插入学号 为(图5)程序会将此结点插入最后,然后再输入学号为 (图6),通过观察以验证程序对插入结点的位置是否进行过判断。图6见图7,可知插入程序没有问题。 图7图8再执行3(删除结点),见图8,我想删除的学号为,我输入进去后马上可以得到新的链表并会打印出来,观察可得已被删除,再输入里面没有的学号的,观察运行结果(图9)。图9输入学号为0,返回主菜单。图10再执行4(退出函数),我加了简单的一句“谢谢您的使用”,并在最后有个getc。

17、h(),后面还有exit(0)语句,就是打印“谢谢您的使用”(图10)后,就会执行到getch(),从终端接收一个字符后,就会执行后面的语句exit(0)即退出for循环,整个主函数也就结束了。四、实验过程中需要记录的实验数据表格学号电话地址邮编江西江西江西江西云南安徽贵州海南湖北四川江苏江西五、实验步骤、程序调试方法大多数情况下win-tc 和vc+ 会提醒错误在什么地方,然后我就去提示的地方修正程序。一步一步地就可以让程序正常运行了而且输入、打印、删除、插入程序运行正常。六、实验中存在的问题及解决方案刚开始由于学号都是由0开始,所以我选择了字符数组来存储,但考虑到这样会浪费很多内存空间,因。

18、为如果用字符数组来存储学号,则一个学号要用9个字节,而用长整型只需要4个字节,所以我最后选择了长整型变量,但这需要一些处理,因为长整型数据不可能以0开头,所以只需要在打印的时候在前面加一个0字符就可以了。刚开始结点的电话号码信息,我选择了用长整型,但长整型变量存储11位整数,将会溢出,所以我最后选择了浮点型,这样相对字符型数据会节省很多内存空间。七、心得体会以前我有用过mysql数据库,并学习了一点点的关于mysql的知识并掌握了一点sql语句的使用,我设计的打印出来的格式,就是模仿mysql数据库的格式,我觉得蛮好看的。做成了这个链表,我觉得我对数据库有了更多的理解。第一次写170多行的程序,虽然有很多是书上的,但放在一起总是会感觉好长,给自己的一个反应就是害怕,可成功的做完这个链表,则会很有很大的成就感。自己的错误也会在此期间体现,通过一步一步的改正错误,总结自己容易犯错误的地方,对自己的帮助很大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值