动态链表详细讲解_第1页
动态链表详细讲解_第2页
动态链表详细讲解_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、链表我自我感觉是真的很好的.对于c语言的一些不同类型的数据是很方便处理的.它就像一个容器.容纳着多种类型的数据.至于这个我就不说什么了.只说说我们今天的主题是链表的建立,删除和添加.至于静态链表我就不说了.这个比较简单.动态的还是有点绕.我也是在网上找了半天找不到什么好的自己想要的效果.就自己写了一段程序.我把该标记的都标记了.我相信你看了会有大的收获的./*头文件所需要的库文件*/#include"iostream"#include"stdlib.h"#include"stdio.h"#include"iomanip&qu

2、ot;#defineLENsizeof(structstudent)usingnamespacestd;voidinput();structstudentintnumber;floatprice;structstudent*next;intn=0;/全局变量定义节点数/*创建链表总共有三个结构体指针分别是*head,(头指针标记)*p1(动态产生内存空间指针),*p2(当前链表的指针最后一个节点)*/structstudent*creat()个空间个空间空。的头到structstudent*head,*p1,*p2;head=NULL;/head返回是void*类型p1=p2=(structs

3、tudent*)malloc(LEN);/p1p2指向同一块内存空间即你申请的那input();/input函数接受输入界面cin>>p1->number>>p1->price;/在申请的里边输入数据while(p1->number!=0)/结束标记符数字0作为输入结束的标记n=n+1;/n计数器记录你输入记录的个数if(n=1)/第一个节点head=p1;/如果是第一个节点那么就直接将其内容写进去elsep2->next=p1;/否则即不是第一个节点,那么将指针p1赋值p2->nextp2=p1;/p2移动到当前位置p1=(structs

4、tudent*)malloc(LEN);/重新为p1申请空间cout<<setw(35)<<"输入编号"<<setw(10)<<"输入成绩"<<endl;cin>>p1->number>>p1->price;/继续输入看是不是输入结束标记0了p2->next=NULL;/如果输入结束可以将本链表的指针域即p2所在位置赋值为return(head);/*下边是打印部分由于上边创建部分返回的是head结构体指针,他是你生成链表所以在打印时他应该作为参数,所以

5、在打印中有一个指针。他的作用大家也可以猜了吧就是接受你的参数*/voidshow(structstudent*head)structstudent*p;p=head;/将参数结构体指针head给另一个结构体指针pif(head!=NULL)/如果为空head是空指针即不指向任何地方所以此处不能写成head->next;无意义cout<<setw(50)<<"总共有"<<n<<"条记录"<<endl;/输出记录总共的条数cout<<setw(50)<<"正在

6、输出结果"<<endl;while(p!=NULL)/因为如果为空head是空指针所以想对应的p也是空指针即不指向任何地方cout<<setw(50)<<"编号为"<<p->number<<"成绩"<<p->price<<endl;p=p->next;/顺序移动指针else/否则和上边的if对应链表为空的情况cout<<setw(50)<<"此链表为空,没有输出的结果。"<<endl;/*

7、添加指针函数中参数是(你建立的head和你新建的stu)*/structstudent*addorder(structstudent*head,structstudent*stu)/*总共有三个结构体指针指针p1作为头指针的作用在函数总作用指针p2作为你生成的添加的指针*/structstudent*p1,*p2;p1=head;p2=stu;if(p1!=NULL)/即添加的链表在添加之前不是空指针while(p1->next!=NULL)/开始寻找知道你寻找到他的指针域为空p1=p1->next;/指针p1寻找自己的指针域中存储地址地方n=n+1;p1->next=p2;

8、/将你产生的节点指针p2接到p2后边p2->next=NULL;else/添加之前是空n=n+1;cout<<setw(40)<<"你的原来链表为空链表"<<endl;head=p2;/把你产生的节点给了headp2->next=NULL;return(head);/*删除节点有两个参数一个数指针head另一个是你要删除的标志num还是有两个指针*/structstudent*del(structstudent*head,intnum)structstudent*p1,*p2;/指针p2指向找到的前一个指针p1=head;if

9、(head!=NULL)/此链表不为空while(p1->number!=num&&p1->next!=NULL)/顺序查找链表结构p2=p1;p1=p1->next;if(p1->number=num)cout<<setw(50)<<"找到删除结果删除的记录为"<<endl;cout<<setw(50)<<"编号为"<<p1->number<<"成绩"<<p1->price<<

10、;endl;n=n-1;if(p1->next=NULL)cout<<setw(50)<<"你要删除的是的是最后一条记录"<<endl;p2->next=NULL;cout<<setw(50)<<"编号为"<<p1->number<<"成绩"<<p1->price<<endl;elsep2->next=p1->next;else/此处是没有找到节点cout<<setw(50)<

11、;<"没有找到要删除的节点。"<<endl;else/此处为链表head为空时cout<<setw(50)<<"你要删除的链表为空不能进行删除操作。"<<endl;return(head);"<<endl;"<<endl;voidinput()cout<<setw(50)<<cout<<setw(50)<<"*输入你要输入的记录。*"<<endl;cout<<setw

12、(50)<<cout<<setw(50)<<H*"<<endl;cout<<endl;cout<<setw(35)<<"输入编号"<<setw(10)<<"输入成绩"<<endl;intmain()structstudent*head,*p;intnum;head=creat();show(head);cout<<endl;"<<endl;"<<endl;"<<endl;cout<<setw(50)<<"输入你要删除的节点cin>>num;head=del(head,num

温馨提示

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

评论

0/150

提交评论