c语言实现链表及其基本操作
2016-09-13 18:18
176 查看
介绍
链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
和顺序表的区别:
代码实现
链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
和顺序表的区别:
顺序表使用数组存储线形的元素,其特点是可以随机存取,但是,因为逻辑上相邻的元素物理上也相邻,所以插入删除需要移动元素。链表使用指针链表示线形表元素的逻辑关系,插入和删除只需修改指针,不能随机存取。
代码实现
typedef int DataType; typedef struct Node {//结构实现 DataType data; struct Node* next; }Node, *PNode;
void InitList(PNode* PHead)//初始化 { assert(PHead); *PHead = NULL; } PNode ByeNode(DataType data)//申请一个结点 { PNode newNode = NULL; newNode = (PNode)malloc(sizeof(Node)); if (NULL == newNode) { printf("out of memory.\n"); exit(1); } else { newNode->data = data; newNode->next = NULL; } return newNode; } void PopBack(PNode* PHead)//尾删 { assert(PHead); if (NULL == *PHead) { return; } else if(NULL == (*PHead)->next) { PNode TempNode = *PHead; free(TempNode); TempNode = NULL; *PHead = NULL; } else { PNode PCur = *PHead; while (PCur->next->next) { PCur = PCur->next; } PCur->next = NULL; } } void PushBack(PNode* PHead, DataType data)//尾插 { assert(PHead); if (NULL == *PHead) { *PHead = ByeNode(data); } else { PNode PCur = NULL; PCur = *PHead; while (PCur->next) { PCur = PCur->next; } PCur->next = ByeNode(data); } } void PushFront(PNode *PHead, DataType data)//头插 { assert(PHead); PNode PreNode = NULL; PNode Node = ByeNode(data); PreNode = *PHead; Node->next = PreNode; *PHead = Node; } void PopFront(PNode *PHead)//头删 { assert(PHead); PNode PreNode = *PHead; if (NULL == *PHead) { return; } else if (NULL == (*PHead)->next) { *PHead = NULL; } else { *PHead = PreNode->next; free(PreNode); PreNode = NULL; } }
PNode Find(PNode* PHead, DataType data)//查找 { assert(PHead); PNode PCur = *PHead; while (PCur) { if (data == PCur->data) break; PCur = PCur->next; } return PCur; } void Destroy(PNode* PHead)//销毁 { assert(PHead); PNode PCur = *PHead; while (PCur->next) { PNode Dnode = PCur; PCur = PCur->next; free(Dnode); Dnode = NULL; } } int Empty(PNode PHead)//判空 { if (NULL == PHead) return 0; else return 1; } int Size(PNode PHead)//求链表中结点的个数 { PNode Node = PHead; DataType num = 0; while (Node) { num++; Node = Node->next; } return num; } void PrintList(PNode* PHead)//打印单链表 { PNode PCur = *PHead; assert(PHead); while (PCur) { printf("%d->",PCur->data); PCur = PCur->next; } printf("NULL\n"); } void Insert(PNode pos, DataType data)//在data后插入结点 { PNode newNode = ByeNode(data); PNode PreNode = pos; newNode->next = PreNode->next; PreNode->next = newNode; }
相关文章推荐
- C语言实现单链表的基本操作及其部分面试题
- 单链表及其基本操作(C语言实现)
- c语言实现单链表数据结构及其基本操作
- C语言实现单链表的基本操作及其部分面试题
- 静态串及其基本操作(C语言实现)
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 单链表的基本操作大全之C语言实现(二)
- c语言实现双向链表的基本操作
- 经典面试题---单链表的基本操作(C语言实现)
- 数据结构--单链表的基本操作(C语言实现)
- 单链表的实现及其基本操作
- C语言实现单链表——之基本操作1
- C语言实现链表的创建、增加、删除、查询、逆序、清空等基本操作
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 单链表的基本操作大全之C语言实现(一)
- C语言实现无头链表的基本操作
- C语言实现双向链表的基本操作
- C语言实现单链表(带头结点)的基本操作
- 单向链表基本操作(C语言实现)
- 单链表的基本操作(C语言实现)