(总结)数据结构之链表的基本操作说明和示例(待补充)
2012-04-05 23:02
603 查看
数据结构之链表的基本操作说明和示例
一:链表的基础知识:二:链表的分类:
单链表,双链表和循环链表.
1.带有头结点的单链表:
单链表的基本操作---初始化,创建,插入,删除,取某个元素值.....
1).单链表的创建:
a.利用头插法建立单链表:
//建立一个带头结点的单链表 void CreatList_L(LinkList &L,int n) { //输入n个元素的值建立带表头结点的单链表 int i; LinkList p,q; L = (LinkList)malloc(sizeof(LNode)); //使头结点的指针域为空,即不指向任何地方. L->next = NULL; q = L; //头插法 for (i=n;i>0;--i) { //生成一个新结点p p = (LinkList)malloc(sizeof(LNode)); //读入新结点的数据 printf("\n请输入第%d个结点的数据:",n-i+1); scanf("%d",&p->data); p->next = L->next; L->next = p; } }
b.利用尾插法建立单链表:
//建立一个带头结点的单链表 void CreatList_L(LinkList &L,int n) { //输入n个元素的值建立带表头结点的单链表 int i; LinkList p,q; L = (LinkList)malloc(sizeof(LNode)); //使头结点的指针域为空,即不指向任何地方. L->next = NULL; q = L; //尾插法 for (i=n;i>0;--i) { //生成一个新结点p p = (LinkList)malloc(sizeof(LNode)); //读入新结点的数据 printf("\n请输入第%d个结点的数据:",n-i+1); scanf("%d",&p->data); q->next = p; q = p; } p->next = NULL; }2).单链表的插入:
难点是在指定位置之前(合法的位置是1到表长+!)插入元素时,寻找到其前一个结点.初始p为L,指向头结点,i为计数器,初始为0,如果p=L->next;i=1;的话插入元素时就会出错(无法插入元素到第一个位置).
//指定位置插入元素的函数InsertList_L Status InsertList_L(LinkList &L,int pos,ElemType e) { //在带头结点的单链表的第pos个位置之前插入数据元素e int i; LinkList p; LinkList q; p = L; i = 0; //寻找第(pos-1)个结点 while (p && i<pos-1) { p = p->next; ++i; } //没有找到要插入位置的前一个结点 if (!p || i>pos-1) { return ERROR; } //生成新结点 q = (LinkList)malloc(sizeof(LNode)); //给新结点的数据域赋值 q->data = e; q->next = p->next; p->next = q; return OK; }3).取得指定位置的结点元素的值:
[b]合法位置为1到表长,[/b]
Status GetElem(LinkList &L,int pos,ElemType &e) { int j; LinkList p; //p指向首结点,j为计数器为1 p = L->next; j = 1; //顺时针向后移动,直到p指向第pos个元素或者p为空. while( p && j<pos ) { p = p->next; j++; } if( !p || j>pos) { printf("\n取结点元素值时指定的位置不合法!\n"); return ERROR; } e = p->data; return OK; }4).单链表的删除:
关键是要找到待删除位置前一个结点p,然后p->next = p->next->next;解除中间元素的链接关系而删除.
//指定位置删除元素的函数DeleteList_L Status DeleteList_L(LinkList &L,int pos,ElemType &e) { //在带头结点的单链表L中,删除第pos个元素,并由e返回其值 int i; LinkList p,q; //寻找到其前一个结点.初始p为L,指向头结点,i为计数器,初始为0, p = L; i = 0; //寻找第(pos-1)个结点 while (p->next && i<pos-1) { p = p->next; ++i; } //没有找到要删除位置的前一个结点 if (!(p->next)|| i>pos-1) { return ERROR; } //相等于p->next = p->next->next;只是为了释放删除的结点,借助新的结点过渡 q = p->next; p->next = q->next; e = q->data; free(q); q = NULL; return OK; }
5).显示所有元素的值.
//显示所有的元素值 void DisplyList_L(LinkList &L) { LinkList p; int j; p = L->next; j = 0; printf("\n输出单链表的各个元素!\n"); while(p!=NULL) { printf("\t第%d个元素是:%d\n",++j,p->data); p = p->next; } }
相关文章推荐
- 【学习总结】数据结构之循环链表的基本操作
- 数据结构之双链表的基本操作
- 数据结构与算法-链表的基本操作---ShinPans
- 数据结构——单链表及其基本操作
- 【数据结构作业】实验三 单链表的基本操作(必做,设计性实验,4学时)
- 实战数据结构(5)_双向循环链表的基本操作
- 数据结构 【实验3 链表基本操作】
- 数据结构中双向链表的基本操作(源代码)
- 数据结构(4):双向链表的基本操作
- 数据结构之链表(1):单链表基本操作
- 数据结构之链表基本操作算法演示
- 数据结构(二)链表1:链式存储的基本操作
- 数据结构——几种链表基本操作
- 实战数据结构(5)_双向循环链表的基本操作
- 数据结构之链表单向操作总结
- 数据结构(第二天)单链表的基本操作,创建单链表,头插法,尾插法,删除节点,查询节点
- 数据结构5: 链表(单链表)的基本操作及C语言实现
- 数据结构之——链表的基本操作
- 数据结构之单链表、双链表的基本操作
- [数据结构]基本概念、单链表操作