单链表的基本算法1---C语言实现
来源:互联网 发布:网络营销优化 编辑:程序博客网 时间:2024/06/01 01:34
LinkList.h
#ifndef __LINK_LIST_H__#define __LINK_LIST_H__#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;//定义数据类型typedef struct Node{ DataType data; struct Node* pNext;}Node, *PNode;//初始化链表void InitLinkList(PNode* pHead);//给链表创建新结点PNode BuyNode(DataType x);//正向打印链表void PrintLinkList(PNode pHead);//逆向打印链表(递归打印)void PrintLinkListFormpTailNode(PNode pHead);//给链表尾插void PushBack(PNode* pHead, DataType x);//给链表尾删void PopBack(PNode* pHead);//给链表头插void PushFront(PNode* pHead, DataType x);//给链表头删void PopFront(PNode* pHead);// 求链表中节点的个数 size_t Size(PNode pHead);// 正向销毁单链表 void DestroyList(PNode* pHead);// 逆向销毁链表(递归删除)void DestroyLinkListpTailNode(PNode*pHead);#endif//__LINK_LIST_H__
LinkList.c
#include"LinkList.h"//初始化链表void InitLinkList(PNode* pHead){ assert(*pHead); (*pHead) = NULL;}//给链表创建新结点PNode BuyNode(DataType x){ PNode pCur = (PNode)malloc(sizeof(Node)); if (NULL == pCur) return NULL; else { pCur->data = x; pCur->pNext = NULL; return pCur; }}//正向打印链表void PrintLinkList(PNode pHead){ if (NULL == pHead) printf("null\n"); else { while (pHead) { printf("%d--->", pHead->data); pHead = pHead->pNext; } printf("NULL\n"); }}//逆向打印链表(使用递归)void PrintLinkListFormpTailNode(PNode pHead){ if (pHead!=NULL) { PrintLinkListFormpTailNode(pHead->pNext); printf("%d---", pHead->data); }}//逆向打印链表时,尾节点后面没有 "NULL",例如:3-->2-->1--> //所以封装一个函数,给尾节点加NULL,就变成3-->2-->1-->NULLvoid PrintLinkListFormpTailNode2(PNode pHead){ PrintLinkListFormpTailNode(pHead); printf("NULL\n");}//给链表尾插void PushBack(PNode* pHead, DataType x)//尾插函数{ PNode pTail = *pHead; PNode pCur = BuyNode(x); if (NULL == (*pHead)) *pHead = pCur; else { while (pTail->pNext) { pTail = pTail->pNext; } pTail->pNext = pCur; }}//给链表尾删void PopBack(PNode* pHead){ assert(*pHead); PNode pTail = *pHead; PNode pCur = NULL; if (NULL == (*pHead)->pNext) { free(*pHead); (*pHead) = NULL; } else { while (pTail->pNext->pNext) { pTail = pTail->pNext; } pTail->pNext = pCur; free(pCur); pCur = NULL; }}//给链表头插void PushFront(PNode* pHead, DataType x){ PNode pCur = BuyNode(x); if (NULL == (*pHead)) *pHead = pCur; else { pCur->pNext = *pHead; *pHead = pCur; }}//给链表头删void PopFront(PNode* pHead){ PNode pCur = NULL; assert(*pHead); if (NULL == (*pHead)) ; else { pCur = *pHead; *pHead = pCur->pNext; free(pCur); pCur = NULL; }}//求链表中节点的个数 size_t Size(PNode pHead){ assert(pHead); int count = 0; PNode pTail = pHead; while (pTail) { count++; pTail = pTail->pNext; } return count;}// 正向销毁单链表 void DestroyList(PNode* pHead){ PNode pCur = NULL; PNode pTail = NULL; if (NULL == (*pHead)) return; pCur = *pHead; while (pCur) { pTail = pCur->pNext; free(pCur); pCur = pTail; } *pHead = NULL;}// 逆向销毁链表(递归法销毁)void DestroyLinkListpTailNode(PNode*pHead){ assert(pHead); if (*pHead) { DestroyLinkListpTailNode(&((*pHead)->pNext));//参数是二级指针,需要传指针 free(*pHead); (*pHead) = NULL; }}
test.c
#include"LinkList.h"void test(){ PNode pHead; InitLinkList(&pHead); PushBack(&pHead, 1);//尾插 PushBack(&pHead, 2);//尾插 PushBack(&pHead, 3);//尾插 PushBack(&pHead, 4);//尾插 PushBack(&pHead, 5);//尾插 PushBack(&pHead, 6);//尾插 PrintLinkListFormpTailNode(pHead);//逆向打印链表 PrintLinkListFormpTailNode2(pHead);//封装成的逆向打印函数 PrintLinkList(pHead);//正向打印链表 PopBack(&pHead);//尾删 PopBack(&pHead);//尾删 PopBack(&pHead);//尾删 PopBack(&pHead);//尾删 PopBack(&pHead);//尾删 PopBack(&pHead);//尾删 PrintLinkList(pHead);//正向打印链表 PushFront(&pHead, 2);//头插 PushFront(&pHead, 4);//头插 PushFront(&pHead, 6);//头插 PushFront(&pHead, 8);//头插 PushFront(&pHead, 10);//头插 PushFront(&pHead, 9);//头插 PrintLinkList(pHead);//正向打印链表 PopFront(&pHead);//头删 PopFront(&pHead);//头删 PopFront(&pHead);//头删 PopFront(&pHead);//头删 PopFront(&pHead);//头删 PopFront(&pHead);//头删 PrintLinkList(pHead);//正向打印链表 int num=Size(pHead);// 求链表中节点的个数 printf("%d\n", num); DestroyList(&pHead);// 正向销毁单链表 PrintLinkList(pHead);//正向打印链表 DestroyLinkListpTailNode(&pHead);// 逆向销毁链表 PrintLinkList(pHead);//正向打印链表}int main(){ test(); system("pause"); return 0;}
阅读全文
1 0
- 单链表的基本算法1---C语言实现
- 基本排序算法的C语言实现
- 基本排序算法的C语言实现
- 《数据结构与算法》-单链表基本操作的C语言实现
- 单链表的基本算法2---C语言实现
- 几个基本排序算法的代码实现(C语言)
- 算法与数据结构-堆的基本操作C语言实现
- 算法与数据结构-队列的基本操作C语言实现
- 算法与数据结构-栈的基本操作C语言实现
- 算法与数据结构-堆的基本操作C语言实现
- C语言实现二叉排序树的基本运算算法
- C语言实现单链表的基本操作
- 单链表的基本操作c语言实现
- C语言实现单链表的基本操作
- 单链表的基本操作C语言实现
- C语言实现基本PSO算法
- 算法导论C语言实现: 基本数据结构
- 单链表的C语言算法实现
- Android Studio3.0更新之路(遇坑必入)
- hdu 5904
- SQL语句order by 多列排序
- Mfc笔记
- Spring-Boot Unit Test 失败总结
- 单链表的基本算法1---C语言实现
- Spark性能优化指南——基础篇
- windows10系统下安装keras框架以theano为后端并配置gpu加速
- 如何创建一个插件
- vim插件1--taglist
- 自定义View系列之ViewPager实现广告条效果
- PAT (Basic Level) Practise (中文)1050. 螺旋矩阵(25)
- ARP与RARP
- Highways UVA