c语言实现单链表的及各项基本功能
2017-06-22 17:12
731 查看
单链表的各项基本功能都在以下的函数中实现
//录入数据 ListNode* BuyNode(DataType x) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->data = x; node->next = NULL; return node; } //打印 void PrintList(ListNode* pList) { ListNode* cur = pList; while (cur) { printf("%d->", cur->data); cur = cur->next; } printf("NULL"); } //尾插 void PushBack(ListNode** ppList, DataType x) { //1,空 //2,非空 if (*ppList == NULL) { *ppList = BuyNode(x); } else { ListNode* tail = *ppList; while (tail->next) { tail = tail->next; } tail->next = BuyNode(x); } } //尾删 void PopBack(ListNode** ppList) { //1,空 //2,一个 //3,多个 if ((*ppList) == NULL)//空 { return; } else if ((*ppList)->next == NULL)//一个 { free(*ppList); *ppList = NULL; } else//多个 { ListNode* prev = NULL; ListNode* tail = *ppList; while (tail->next) { prev = tail; tail = tail->next; } free(tail); tail = NULL; prev->next = NULL;//让上一个结点的next置空 } } //头插 void PushFront(ListNode** ppList, DataType x) { //1,空 //2,非空 if ((*ppList) == NULL) { *ppList = BuyNode(x); } else { ListNode* tmp = *ppList; *ppList = BuyNode(x); (*ppList)->next = tmp; } } //头删 void PopFront(ListNode** ppList) { //1,空 //2,一个 //3,多个 if ((*ppList) == NULL) { return; } else if ((*ppList)->next == NULL) { free(*ppList); *ppList = NULL; } else { ListNode* tmp = *ppList; *ppList = tmp->next; free(tmp); } } //查找 ListNode* Find(ListNode* pList, DataType x) { ListNode* cur = pList; while (cur) { if (cur->data == x) { return cur; } cur = cur->next; } return NULL; } // 在pos的前面插入一个节点x void Insert(ListNode** ppList, ListNode* pos, DataType x) { assert(ppList); assert(pos); //1,头插 //2,中间插入 if ((*ppList)->next == NULL) { PushFront(ppList,x); } else { ListNode* prev = *ppList; while (prev->next != pos) { prev = prev->next; } ListNode* tmp = BuyNode(x); prev->next = tmp; tmp->next = pos; } } //删除 void Erase(ListNode** ppList, ListNode* pos) { //1,头 //2,尾 //3,中间 assert(pos); if (*ppList == pos) { PopFront(ppList); } else if (pos->next == NULL) { PopBack(ppList); } else { ListNode* prev = *ppList; while (prev->next != pos) { prev = prev->next; } prev->next = pos->next; free(pos); } }
相关文章推荐
- c语言单向链表的基本功能的实现
- 线性表基本功能的c语言实现
- 【C语言】实现Linux下的cp命令的基本功能
- 数据结构之单链表基本功能的实现
- [置顶] 小游戏:扫雷 (C语言实现扫雷的基本功能)
- C语言单链表的建立,查找,添加,删除,修改功能实现
- C++实现单链表的几个基本功能
- 单链表的增删改查功能实现C语言代码
- C语言:单链表简单功能实现
- 【C语言】实现Linux下的last命令的基本功能
- C语言实现基本计算器功能
- 我自己编的一个c语言小程序:银行基本功能的实现
- ASP基本功能实现
- CentOS4.4下邮件服务器架设笔记之基本功能实现 推荐
- 基于SVG技术实现WebGIS的基本功能
- 地磅称量系统之(53)在封装对象的类库中实现包括IDataErrorInfo接口提供的所有方法和并且扩展对异常具有添加和删除功能的基本业务对象基类
- 用C#类实现JavaScript的基本功能
- WINCE实现的基本功能
- java实现单链表,功能有插入,删除,遍历。
- 基于单链表的列表基本操作 类C语言实现