欢迎来到天天文库
浏览记录
ID:15400795
大小:42.00 KB
页数:5页
时间:2018-08-03
《c++实验设计(二)--单向链表的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、这一次是有关链表的总结:许多人对链表很陌生,链表是数据结构的核心内容,我们学的只是其中的一点,多余的内容我也不太清楚,有兴趣的话可以查看有关数据结构的书。下面主要谈谈创建简单的链表是怎么实现的。一、链表是由节点通过指针连在一块的,所以节点是其基本元素:、首先创建节点:structNode{inta;Node*next;};链表的节点和一般的结构体有点区别,包含两个部分:1、数据域2、指针域。数据域是根据自己的需要所设计的,上例中inta就是数据域的内容,Node*next是指针域的内容,我这个链表是模拟整型数据进栈出栈的过程。书上有个内容:一般情
2、况下,结构体是不含有本身结构体的变量,例如:structNode{inta;Nodenext;};这样就不正确了,具体原因是因为这个结构体没创建成功,不知道其所占空间,系统无法为之分配空间,但是可以使自身的指针型数据,因为无论是何种类型的指针,其所占空间大小都是4个字节,所占空间大小就很明确了。下面我们就具体来实现这个创建链表的过程:、添加节点:voidcreat(Node*&Head){Node*p=newNode;cin>>p->a;p->next=Head;Head=p;}数据结构中成这种添加节点的方法叫头插法,自然有对应的尾插法(这里不说
3、了)。注意几个细节吧:1、voidcreat(Node*&Head)中的Head前加了个“&”符号表示引用,这表明从主函数中传递过来的头节点的别名是Head,就是在该函数中改变Head的指向影响到了主函数传递过来的参数的指向,“*”表示的是指针变量。创建链表一定要用堆空间的形式来为节点申请空间,这样做当然有好处,如果不用堆空间,那么在该函数中申请的局部自动变量会随着该函数的结束而被销毁空间,那么所创建的链表也就不复存在了。故用堆空间来申请。我们在主函数中具体的操作一下:structNode{inta;Node*next;};#include4、stream>usingnamespacestd;voidcreat(Node*&Head){Node*p=newNode;cout<<"请输入一个整数:";cin>>p->a;p->next=Head;Head=p;}intmain(){Node*head=NULL;creat(head);cout<a<5、ode*head=NULL;for(inti=0;i<5;i++){creat(head);}cout<a<6、是记录头节点位置的,刚开始时head是指向NULL的,后来进入到creat(head);函数中,其指向就改变了,编程指向链表的头节点的位置,这就是引用传递的效果“voidcreat(Node*&Head)”中Head前是“&”,引用的标志,也就是起这个作用,改变主函数中head的指向。下面就写一个对链表遍历的函数:、链表的遍历voidshow(constNode*Head){if(Head==NULL){cout<<"链表是空";}while(Head!=NULL){cout<a<<"";Head=Head->next;}}这样7、就可以实现你想查看的数据了在主函数中这样就可以实现:intmain(){Node*head=NULL;for(inti=0;i<5;i++){creat(head);}show(head);return0;}下面在说如何删除链表:、删除链表的函数设计:voiddeletehead(Node*&Head){Node*p=Head;while(p!=NULL){p=Head->next;deleteHead;Head=p;}}在主函数中只需要这样实现即可:intmain(){Node*head=NULL;for(inti=0;i<5;i++){cre8、at(head);}show(head);deletehead(head);show(head);return0;}整个代码:struc
4、stream>usingnamespacestd;voidcreat(Node*&Head){Node*p=newNode;cout<<"请输入一个整数:";cin>>p->a;p->next=Head;Head=p;}intmain(){Node*head=NULL;creat(head);cout<a<5、ode*head=NULL;for(inti=0;i<5;i++){creat(head);}cout<a<6、是记录头节点位置的,刚开始时head是指向NULL的,后来进入到creat(head);函数中,其指向就改变了,编程指向链表的头节点的位置,这就是引用传递的效果“voidcreat(Node*&Head)”中Head前是“&”,引用的标志,也就是起这个作用,改变主函数中head的指向。下面就写一个对链表遍历的函数:、链表的遍历voidshow(constNode*Head){if(Head==NULL){cout<<"链表是空";}while(Head!=NULL){cout<a<<"";Head=Head->next;}}这样7、就可以实现你想查看的数据了在主函数中这样就可以实现:intmain(){Node*head=NULL;for(inti=0;i<5;i++){creat(head);}show(head);return0;}下面在说如何删除链表:、删除链表的函数设计:voiddeletehead(Node*&Head){Node*p=Head;while(p!=NULL){p=Head->next;deleteHead;Head=p;}}在主函数中只需要这样实现即可:intmain(){Node*head=NULL;for(inti=0;i<5;i++){cre8、at(head);}show(head);deletehead(head);show(head);return0;}整个代码:struc
5、ode*head=NULL;for(inti=0;i<5;i++){creat(head);}cout<a<6、是记录头节点位置的,刚开始时head是指向NULL的,后来进入到creat(head);函数中,其指向就改变了,编程指向链表的头节点的位置,这就是引用传递的效果“voidcreat(Node*&Head)”中Head前是“&”,引用的标志,也就是起这个作用,改变主函数中head的指向。下面就写一个对链表遍历的函数:、链表的遍历voidshow(constNode*Head){if(Head==NULL){cout<<"链表是空";}while(Head!=NULL){cout<a<<"";Head=Head->next;}}这样7、就可以实现你想查看的数据了在主函数中这样就可以实现:intmain(){Node*head=NULL;for(inti=0;i<5;i++){creat(head);}show(head);return0;}下面在说如何删除链表:、删除链表的函数设计:voiddeletehead(Node*&Head){Node*p=Head;while(p!=NULL){p=Head->next;deleteHead;Head=p;}}在主函数中只需要这样实现即可:intmain(){Node*head=NULL;for(inti=0;i<5;i++){cre8、at(head);}show(head);deletehead(head);show(head);return0;}整个代码:struc
6、是记录头节点位置的,刚开始时head是指向NULL的,后来进入到creat(head);函数中,其指向就改变了,编程指向链表的头节点的位置,这就是引用传递的效果“voidcreat(Node*&Head)”中Head前是“&”,引用的标志,也就是起这个作用,改变主函数中head的指向。下面就写一个对链表遍历的函数:、链表的遍历voidshow(constNode*Head){if(Head==NULL){cout<<"链表是空";}while(Head!=NULL){cout<a<<"";Head=Head->next;}}这样
7、就可以实现你想查看的数据了在主函数中这样就可以实现:intmain(){Node*head=NULL;for(inti=0;i<5;i++){creat(head);}show(head);return0;}下面在说如何删除链表:、删除链表的函数设计:voiddeletehead(Node*&Head){Node*p=Head;while(p!=NULL){p=Head->next;deleteHead;Head=p;}}在主函数中只需要这样实现即可:intmain(){Node*head=NULL;for(inti=0;i<5;i++){cre
8、at(head);}show(head);deletehead(head);show(head);return0;}整个代码:struc
此文档下载收益归作者所有