c语言实现链表及其基本操作
来源:互联网 发布:mac 音乐 编辑:程序博客网 时间:2024/04/30 04:30
链表:
链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
和顺序表的区别:
顺序表使用数组存储线形的元素,其特点是可以随机存取,但是,因为逻辑上相邻的元素物理上也相邻,所以插入删除需要移动元素.链表使用指针链表示线形表元素的逻辑关系,插入和删除只需修改指针,不能随机存取。
代码实现
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;elsereturn 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;}
3 0
- c语言实现链表及其基本操作
- C语言实现链表基本操作
- 动态串及其基本操作(C语言实现)
- 静态串及其基本操作(C语言实现)
- 单链表及其基本操作(C语言实现)
- c语言实现单链表数据结构及其基本操作
- C语言实现双向链表的基本操作
- C语言实现双向链表的基本操作
- c语言实现静态链表的基本操作
- c语言实现循环链表的基本操作
- c语言实现双向链表的基本操作
- 单向链表基本操作(C语言实现)
- C语言实现链表的基本操作
- C语言 链表的基本操作实现 源码
- 单向链表的C语言实现与基本操作
- C语言实现单链表的基本操作及其部分面试题
- C语言链表基本操作
- C语言链表的基本操作
- GoJS的一些使用技巧
- 取余-美分找零钱问题
- Java实现的对无序数组进行的二分查找法
- Android桌面Widget
- magic机器与深度学习机器人问题指令
- c语言实现链表及其基本操作
- js中apply方法的使用
- 分享一些自己的学习方法
- Codeforces Beta Round #22 (Div. 2 Only)-C. System Administrator
- Activity启动的时候弹出popupwindow
- 通过WiFi连接Android手机,进行ADB调试
- JavaScript-------02
- 搭建nodejs开发环境
- c语言实现字符串中提取数字,遇到非字符串则换行