【Data】数据结构之线性表(2)
2013-05-03 19:40
288 查看
这一篇主要讲单链表的
另附别家博客
第一个是关于顺序线性表实现的程序:http://www.cnblogs.com/ns517/archive/2008/10/05/1304361.html
第二个是关于链表的程序实现:http://www.cnblogs.com/tao560532/articles/2199280.html
这两位博主贴出的程序大概是可以调试出来的,我贴出的都是函数片段,不能直接调试。
线性链表
1、线性链表的概念
以链式结构存储的线性表称之为线性链表。
特点是该线性表中的数据元素可以用任意的存储单元来存储。线性表中逻辑相邻的两元素的存储空间可以是不连续的。为表示逻辑上的顺序关系,对表的每个数据元素除存储本身的信息之外,还需存储一个指示其直接后继的信息。这两部分信息组成数据元素的存储映象,称为结点。
用线性链表表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的
2、线性链表的存储实现
头指针与头结点的区别:
头指针只相当于结点的指针域,头结点即整个线性链表的第一个结点,它的数据域可以放数据元素,也可以放线性表的长度等附加信息,也可以不存储任何信息。
3、 线性表的操作实现(C语言 )
(1)初始化操作
(2)插入操作
(3)删除操作
(4)取某序号元素的操作
(5)归并两个单链表的算法
下一篇讲循环链表和双向链表
另附别家博客
第一个是关于顺序线性表实现的程序:http://www.cnblogs.com/ns517/archive/2008/10/05/1304361.html
第二个是关于链表的程序实现:http://www.cnblogs.com/tao560532/articles/2199280.html
这两位博主贴出的程序大概是可以调试出来的,我贴出的都是函数片段,不能直接调试。
线性链表
1、线性链表的概念
以链式结构存储的线性表称之为线性链表。
特点是该线性表中的数据元素可以用任意的存储单元来存储。线性表中逻辑相邻的两元素的存储空间可以是不连续的。为表示逻辑上的顺序关系,对表的每个数据元素除存储本身的信息之外,还需存储一个指示其直接后继的信息。这两部分信息组成数据元素的存储映象,称为结点。
用线性链表表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的
2、线性链表的存储实现
struct LNODE{ ElemType data; struct LNODE *next; }; typedef struct LNODE LNode; typedef struct LNODE * LinkList;
头指针与头结点的区别:
头指针只相当于结点的指针域,头结点即整个线性链表的第一个结点,它的数据域可以放数据元素,也可以放线性表的长度等附加信息,也可以不存储任何信息。
3、 线性表的操作实现(C语言 )
(1)初始化操作
Status Init_L(LinkList L){ if (L=(LinkList *)malloc(sizeof(LNode)))//给指针L分配同LNode一样大小的内存 {L->next=NULL;return 1;} else return 0; }
(2)插入操作
Status ListInsert_L(LinkList &L,int i,ElemType e)// { LinkList *p=L; j=0; while(p&&j<i-1) { p=p->next; ++j; } if(!p||j>i-1) return ERROR; s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; returen OK; }
(3)删除操作
Status List Delete_L(LinkList &L, int i, ElemType &e) { LinkList *p,*q; p=L; j=0; while(p&&j<i-1) { p=p->next; ++j; } if(!p||j>i-1) return ERROR; q=p->next; p->next=q->next; e=q->data; free(q); return OK; }
(4)取某序号元素的操作
Status GetElem_L(LinkList &L, int i, ElemType &e) { LinkList *p; j=1; p=L->next; while(p&&j<i) { p=p->next; ++j; } if(!p||j>i) return ERROR; e=p->data; return OK; }
(5)归并两个单链表的算法
void MergeList_L(LinkList &la,LinkList &Lb,LinkList &Lc) { //已知单链线性表La和Lb的元素按值非递减排列 //归并后得到新的单链线性表Lc,元素也按值非递减排列 LinkList *pa,*pb,*pc; pa=La->next; pb=Lb->next;//未指向头结点,大概是这里默认头结点不存放数据吧 Lc=pc=La; while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next } } pc->next=pa?pa:pb; free(Lb); //我看的参考资料里只写了Lb的,La不能释放吗?我觉得ok啊 }
下一篇讲循环链表和双向链表
相关文章推荐
- 【Data】数据结构之线性表(1)
- 【Data】数据结构之线性表(3)
- 数据结构之线性表1
- 数据结构与程序设计——C++语言描述(Data Structures & Program Design in C++) by Robert L.Kruse & Alexander J.Ryba
- 数据结构之线性表——栈的链式存储
- 数据结构之线性表顺序存储
- 线性表数据结构解读(四)队列结构Queue
- 学习线性表的数据存储结构时所遇到的问题
- 数据结构线性结构之离散存储--链表
- 数据结构---链表操作(线性结构)
- 数据结构之线性表的线性分配动态存储
- 数据结构之线性表——链表的链式存储(链式描述)
- 数据结构之线性表(C#)
- 线性表数据结构解读(二)链式存储结构LinkedList
- 关于IplImage结构体内指针imageData指向的数据的数据类型的问题
- 2016 UESTC Training for Data Structures B - 卿学姐与基本法 自己构建了一个和堆有点像的数据结构
- 数据结构——线性结构(7)——链队列的实现
- 程序猿必修课之数据结构(三)线性表1
- 数据结构之线性结构(顺序表)【一】
- 使用数组构建线性表的顺序表数据结构