C++|单链表的实现源代码
来源:互联网 发布:tsp问题算法源代码 编辑:程序博客网 时间:2024/04/30 22:39
#include <iostream>using namespace std; typedef struct LNode{ char data; struct LNode * next;}LNode,* listLink;//此处声明了一个结构体类型和一个结构体类型的指针 /*单链表的初始化*/void initList_L(listLink &L){ L=new LNode; L->next=NULL;} /*清空表*/void clearList_L(listLink &L){ LNode *p,*q; p=L->next; L->next=NULL;//这里应该注意:L->next在等号左边和右边的含义是不一样的,在右边表示将下一个结点的地址 //赋值给变量,在左边表示L这个结点的地址域,是被赋值的对象。 while (p) { q=p; p=p->next; delete q;//这里应该这样想:p和q都是指针,是指针在动,他们指向链表,而链表并没有动。 }} /*求表长*/int listLength_L(listLink &L){ LNode *p; int length; p=L; length=0; while(p->next) { length++; p=p->next; }//始终遵循上面注释中说的:p和q都是指针,是指针在动,他们指向链表,而链表并没有动,这样理解就会容易很多。 return length;} /*取第i个结点的元素值*/char getElem_L(listLink &L,int i){ LNode *p; int count; p=L->next; while(p&&count<i) { p=p->next; count++; } if(!p||count>i) cout<<"Position Error!"; else return p->data;} /*确定表中某结点的地址*/LNode *locateElem_L(listLink &L,char x){ LNode *p; p=L->next ; while(p&&p->data!=x) p=p->next; if(!p) return NULL; else return p;} /*插入元素*/void insertElem_L(listLink &L,int i,char x){ LNode *p; LNode *s; int count; p=L->next; count=1; while(p&&count<i-1) { p=p->next; count++; }//寻找第i-1个结点,使p指向第i-1个结点。 if(!p||count>i-1) { cout<<"Poision Error!"; } else { s=new LNode; s->next=p->next; p->next=s;//注意这里赋值的顺序千万不能变,即不能这样:p->next=s; s->next=p->next; //若是这样的话,就等于是先改变了p->next的值,也就不能把p的前继赋值给s了!!! s->data=x; }} /*删除表中的元素,并返回该元素的值*/void deleteElem_L(listLink &L,int i){ LNode *p,*q; int count; p=L->next; count=1; while((p->next)&&count<i-1) { p=p->next; count++; } if(!(p->next)||count>i-1) cout<<"Poision Error"; else { q=p->next; p->next=q->next; delete q;//这里的释放就是把这个指针给销毁了,就是没有这个指针了,这也就是为什么要多一个指针的缘故。 }} /*用正序插入法创建一个单链表*/void creatList_L_1(listLink &L,int n){ initList_L(L); LNode *p,*q; p=L; for(int i=0;i<n;i++) { q=new LNode; cin>>q->data; q->next=NULL; p->next=q; p=q; }}//就是在表的尾端不断接上元素。 /*用逆序插入法创建一个单链表*/void creatList_L_2(listLink &L,int n){ initList_L(L); LNode *p; for(int i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=L->next; L->next=p;//不断地在L和L的前继之间插入新的元素。 }}//逆序法就是第一个输入的元素是单链表的最后一个元素,既是从链表的最后一个元素输入。 void outputList_L(listLink &L,int n){ LNode *p; p=L->next; for(int i=0;i<n;i++) { cout<<p->data<<" "; p=p->next; } cout<<endl;}//依次输出链表中的元素 void main(){ listLink L; //creatList_L_2(L,10); //outputList_L(L,10); creatList_L_1(L,10);//创建一个单链表 //outputList_L(L,10); insertElem_L(L,2,'a');//插入 outputList_L(L,listLength_L(L)); deleteElem_L(L,11);//删除 outputList_L(L,listLength_L(L));}
0 0
- C++|单链表的实现源代码
- 数据结构中单链表的实现+单链表的C语言实现源代码
- 实现类似ping功能的C源代码
- 栈的源代码C/C++实现
- linux下C实现线程池的源代码
- 10个重要的算法C语言实现源代码
- 标C函数itoa实现的源代码[增强版]
- c实现的读大文件方法(源代码)
- C 标准库 函数 源代码的实现 和 分析
- 10个重要的算法C语言实现源代码
- c#serialport类实现串口通信的源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- linux下C实现线程池的源代码
- C++实现字符串和整数之间的相互转换
- Apache Camel框架之HTTP路由
- VMware CentOS 7 最小化安装 上网问题
- TCP的建立连接和关闭连接
- r1309151-逻辑回归小结
- C++|单链表的实现源代码
- 浏览器请求URL www.qq.com页面时会发生什么现象
- 数据结构:实验一 VC++编程环境的灵活应用
- 《Linux程序设计》——文件操作
- zoj 3813 Alternating Sum(2014ACMICPC Regional 牡丹江站网络赛 E)
- 学习计划
- Codeforces Round #263 (Div. 1 - B) Appleman and Tree
- 黑马程序员-装饰模板设计
- Android使用achart常用知识