学生信息的链表管理.doc_第1页
学生信息的链表管理.doc_第2页
学生信息的链表管理.doc_第3页
学生信息的链表管理.doc_第4页
全文预览已结束

下载本文档

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

文档简介

#include #include #include using namespace std; struct stud_nodechar num20;char name20;int score;struct stud_node * next;/定义结构指针;struct stud_node * InsertDoc(struct stud_node * head,struct stud_node * stud)/插入操作。struct stud_node *ptr,*ptr1,*ptr2; /struct 是定义结构体用的关键字,定义了一个类型为stud的结构体,node是stud的一个对象,*ptr,*ptr1,*ptr2是结构体的指针ptr2=head; /定义ptr2为头结点ptr=stud; /ptr指向待插入的新的学生记录结点if(head=NULL) /如果头结点为空head=ptr; /头结点为新的学生记录结点head-next=NULL; /头结点指向后继后等于空else /若头结点不为空while(ptr-numptr2-num)&ptr2-next!=NULL)/当ptr指向的学生学号记录多于ptr2指向的学生学号记录且ptr2指向后继不为空时ptr1=ptr2; /ptr1结点赋予ptr2的学生记录结点ptr2=ptr2-next; /ptr2等于ptr2指向后继if(ptr-numnum) /如果ptr指向的学生学号记录不多于ptr2指向的学生学号记录if(head=ptr2) head=ptr; /且如果头结点=ptr2的信息,头结点为ptr2的学生记录结点 else ptr1-next=ptr; /否则 ptr1的记录指向后继后=ptrptr-next=ptr2; /ptr的信息指向后继后等于ptr2else /否则ptr2-next=ptr; /ptr2指向后继后=ptrptr-next=NULL; /ptr指向后继后为空return head; /插入记录返回头结点struct stud_node * DeleteDoc(struct stud_node * head,char * num)/删除操作。struct stud_node *ptr1,*ptr2;/定义链表结构体指针ptr1,ptr2if(strcmp(num,0)!=0)while(head!=NULL&strcmp(head-num,num)=0) /当头结点不为空且头结点指向num与传人num相同时ptr2=head; /将ptr2定义头结点head=head-next; /头结点变为下一个结点free(ptr2); /释放malloc函数帮ptr2申请的动态内存if(head=NULL) /如果头结点为空return NULL; /返回空值ptr1=head; /ptr1等于头结点ptr2=head-next; /ptr2等于头结点的下一个结点while(ptr2!=NULL) /当ptr2不为空时(ptr2未指向所有元素)if(strcmp(ptr2-num,num)=0) /与传人num进行比较ptr1-next=ptr2-next; /ptr1指向后继等于ptr2指向后继free(ptr2); /释放malloc函数帮ptr2申请的动态内存else /若头结点不为空ptr1=ptr2; /否则ptr1等于ptr2ptr2=ptr1-next; /ptr2=ptr1指向后继return head; /信息返回链表头结点void UpdateDoc(struct stud_node * head,char * num,int score)/修改链表。struct stud_node * ptr; /定义链表结构体指针ptrptr=head; /ptr=头结点while(ptr!=NULL) /当ptr不为空时if(strcmp(ptr-num,num)=0) /如果号码对了ptr-score=score; /ptr指向链表成绩记录等于传人的成绩记录ptr=ptr-next; /ptr等于ptr指向后继elseptr=ptr-next; /否则ptr直接指向后继void Print_Stu_Doc(struct stud_node * head)/遍历操作。struct stud_node * ptr;/定义链表结构体指针ptrif(head=NULL) /若头结点为空coutendl没有记录!endl;/输出没有记录return; /空returncoutendl这些学生的信息为:endl;cout 学号 姓名 成绩 next) /令ptr为头结点,ptr不为空时,ptr等于ptr指向后继coutnum name scoreendl;/输出整个链表的信息struct stud_node * Create_Stu_Doc()/新建链表。struct stud_node * head,*p; /定义链表头结点,指针pint score;char num20;char name20;int size=sizeof(struct stud_node);/sizeof是测试数据长度的,是运算符head=NULL; /struct 是定义结构体用的关键字,定义了一个类型为stud的结构体,node是stud的一个对象,sizeof测试的是stud的长度,返回一个数赋给sizecout请输入这个的学生学号,名字和得分(输入0返回上一层):num;if(strcmp(num,0)!=0) /判断num是否等于0cinnamescore; while(strcmp(num,0)!=0)p=(struct stud_node * )malloc(size); /*开辟一个新节点 */ strcpy(p-num,num); /p指向空的num后接上一个实在的numstrcpy(p-name,name); /同上p-score=score; /p指向score后给结构中的score赋值head=InsertDoc(head,p); /调用插入函数cinnum;if(strcmp(num,0)!=0) /判断num是否等于0cinnamescore;elsebreak;return head; /返回链表信息给结构头指针int main()struct stud_node * head,*p;int choice,score;char num20;char name20;int size=sizeof(struct stud_node); /sizeof是测试数据长度的,是运算符/struct 是定义结构体用的关键字,定义了一个类型为stud的结构体,node是stud的一个对象,sizeof测试的是stud的长度,返回一个数赋给sizedocout1:新建信息表 2:插入信息 3:删除信息 4:修改信息 5:遍历信息表 0:退出choice;switch(choice)case 1:head=Create_Stu_Doc(); /新建链表break;case 2:cout请输入学生学号,姓名和得分(输入0返回上一层):num;if(strcmp(num,0)!=0)cinnamescore;p=(stud_node * )malloc(size);strcpy(p-num,num);strcpy(p-name,name);p-score=score;head=InsertDoc(head,p); /调用插入函数break;case 3:cout请输入学号:num;head=DeleteDoc(head,num); /调用删除函数break;case 4:cout请输入需要修改成绩的学生学号(输入0返回上一层):num;i

温馨提示

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

评论

0/150

提交评论