链表操作实验报告.doc_第1页
链表操作实验报告.doc_第2页
链表操作实验报告.doc_第3页
链表操作实验报告.doc_第4页
链表操作实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二1.实验任务:对本组5个同学的名字进行查询 2.问题描述及要求: 将本组五位同学的姓名、性别、学号、出生年份用链表结构存储。输入姓名可查出性别、学号、出生年份。可插入第六位同学的姓名、性别、学号、出生年份,并显示全部链表内容。可删除某位同学信息,并显示全部链表内容。3.实验任务:此实验涉及的知识点有对链表的节点的定义,创建链表和打印链表,对链表节点的删除和在适当的位置插入一个或多个节点。在每次删除和插入之后打印结果。4.实验实现过程:(1)本程序先将本组的四个成员的学号姓名性别和出生年月等信息储存在链表中,并按学号的升序排列。在此基础上可以按学号插入另外的同学的信息或输入学号删除一个同学的信息,并将结果打印出来;(2)本程序包括一个主函数和三个子函数,子函数分别为对链表的创建,节点的插入和删除。其中main函数的实现过程如下所示:定义i,n,m,k四个整形变量,并设定n=4为本组人数定义四个struct student变量*student,*head,*insert,*hea,head=0调用creat函数创建链表,并将所创建的链表头结点赋值给head打印出此链表打印提示信息:1删除,2插入,0退出由键盘输入所想执行指令的序号0,1或2,执行该操作输入值为1调用dele函数删除该节点打印删除后的链表输入值为2调用inser函数在指定位置插入节点信息打印插入后的链表输入值为0退出程序其中调用的子函数create函数的流程图:插入三个结构体变量*head,*p,*q,定义一个整形变量i为q开辟一个新节点,并将一个学生的信息存储在这个节点中 i等于一?真假p=head=q(把p所指的节点作为第一个节点,即头结点)q-next=NULL;p=q;(把这个节点的指针部分指向空;再把p指向这个节点)将head的值返回delet函数的N-S流程图为:定义函数是struct student型,有形参*he和long key(key为输入要删除的同学的学号);定义两个struct student型变量*b和*pre当b的学号不等于所输入的要删除的学号并且没到表尾时将b赋给pre,并且b向后移寻找插入点 b-num=key真假 b=he(被删是否为首节点)所找的学号不存在是 否he=he-next(原先的第二格节点作为头结点)pre-next=b-next(将b的后边的节点赋给pre的指针域)释放b所占空间 插入函数insert的N-S流程图为:定义此函数的返回值为struct student型,形参为*hea和*insert定义结构体变量*p,*pre,并将heap赋给p hea为NULL真假hea=insert;insert-next=NULL(空链表的情况)当新插入的节点的学号大于p的学号并且p的指针域不为空将p赋给pre,并将p后移一个节点要插入的节点的学号小于或等于p的学号 是(找到插入点) 否P等于头结点p-next=insert;insert=NULL;(插入在表尾)是 否hea等于insert(插入在表首)pre-next=insert(插入在表中间)将新插入节点的指针域指向p将新链表的头结点返回 5.程序代码#include #include #define TYPE struct student /*宏定义结构体类型 *student*/struct studentlong num; /*定义学号,名字,性别等成员和指向下一个的指针*/char name10;char sex;int year;int month;struct student *next;TYPE *create(int n) /*创建链表*/struct student *head,*p,*q;int i;for(i=0;inum,&q-name,&q-sex,&q-year,&q-month);if(i=0)p=head=q;else p-next=q;q-next=NULL;p=q;return head;TYPE *Inser(TYPE *hea,TYPE *insert) /*按学号的升序插入一个学生的信息*/TYPE *p;TYPE *pre;p=hea;if(hea=NULL)hea=insert;insert-next=NULL; /*空链表的情况*/else while (insert-nump-num)&(p-next!=NULL)pre=p;p=p-next; /*指针向后移一个节点*/if(insert-numnum)/*找到了插入点*/if(p=hea)hea=insert;/*插入点在表首*/elsepre-next=insert;/*插入点在表中间*/insert-next=p;elsep-next=insert;insert=NULL;/*插入点在表尾*/return hea;TYPE *dele(TYPE *he,long key)TYPE *b,*pre;b=he;while(b-num!=key)&(b-next!=NULL)/*寻找目标*/pre=b;b=b-next; /*b后移一个节点*/if(b-num=key)if(b=he)/*被删节点为首节点*/he=he-next;elsepre-next=b-next;free(b);elseprintf(num=%ld not been foundn,key);return he;/*删除后的链表首地址返回*/void main()int i,n=4,m,k;TYPE *student;TYPE *head,*insert,*hea;head=0;student=create(n);head=student;printf(num:tnametsextyeartmonthn);for(i=0;inum,student-name,student-sex,student-year,student-month); student=student-next;printf(*n);printf(*input 1 to delete*n);printf(*input 2 to insert*n);printf(*input 0 to exit*n);for(k=0;k=5;k+)scanf(%d,&m);switch(m)case 1: long key;printf(input the number you want to delete:n);/*删除操作*/scanf(%ld,&key);student=dele(head,key);hea=student;printf(after delete the result is:n);int k;for(k=0;knum,student-name,student-sex,student-year,student-month);student=student-next; /*打印删除后的链表*/ break;case 2:int g=0;insert=(TYPE*) malloc(sizeof(TYPE);printf(input number,name,sex,year,month you want to add:n);/*插入操作*/ scanf(%d %s %c %d %d,&insert-num,&insert-name,&insert-sex,&insert-year,&insert-month);student=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论