单链表的C语言算法实现
来源:互联网 发布:余文乐有淘宝店吗 编辑:程序博客网 时间:2024/05/16 19:08
自己用C语言实现的单链表算法,有什么不正确的地方,请各位共同讨论与指正。
#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct Node{ int data; //结点数据域 struct Node *pNext; //指向下一结点的指针域}NODE, *PNODE;//创建一个链表PNODE create_list(void){ PNODE pHead; //链表头指针 PNODE pTail; //链表尾指针 int length; //链表有效结点个数 int i; int val; //每个结点的数据域 PNODE pNew; //指向新创建的结点 printf("请输入要创建链表结点的个数:length= "); scanf("%d", &length); pHead = (PNODE)malloc(sizeof(NODE)); //创建头结点 if (pHead == NULL) { printf("内存分配失败,程序将终止!\n"); exit(-1); } pHead->pNext = NULL; pTail = pHead; //链表有效结点为零时,尾结点相当于头结点 for (i=0; i<length; i++) { printf("请输入第%d个结点的值:", i+1); scanf("%d", &val); pNew = (PNODE)malloc(sizeof(NODE)); //为新结点分配内存 if (pNew == NULL) { printf("内存分配失败,程序将终止!\n"); exit(-1); } pNew->data = val; pTail->pNext = pNew; //使尾结点的指针域指向新创建的结点 pNew->pNext = NULL; //使新创建结点的指针域指向NULL pTail = pNew; //把新创建的结点变成尾结点 } return pHead;}//遍历整个链表void traverse_list(PNODE pHead){ PNODE p = pHead->pNext; while (p != NULL) { printf("%d ", p->data); p = p->pNext; } printf("\n"); return;}//判断链表是否为空int is_empty(PNODE pHead){ if (pHead->pNext == NULL) { return 0; } else { return -1; }}//求链表的长度int length_list(PNODE pHead){ int length = 0; PNODE p = pHead->pNext; while (p != NULL) { length++; p = p->pNext; } return length;}//排序void sort_list(PNODE pHead){ int i, j, t, len = length_list(pHead); PNODE p, q; p = pHead; for (i=0; i<len-1; i++) { p = p->pNext; q = p->pNext; for (j=i+1; j<len; j++) { if (p->data > q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->pNext; } }}//在第pos个结点之前插入一个结点valint insert_list(PNODE pHead, int pos, int val){ PNODE p = pHead; int i=0; while (p != NULL && i < pos - 1) { p = p->pNext; i++; //找到第i个结点 } if (p == NULL || i > pos - 1) { return -1; } PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (pNew == NULL) { printf("内存分配失败,程序将终止!\n"); exit(-1); } pNew->data = val; pNew->pNext = p->pNext; p->pNext = pNew; return 0;}//删除第pos个结点int delete_list(PNODE pHead, int pos, int *pVal){ PNODE p = pHead; int i=0; //找到待删结点的前一个结点 while (p->pNext != NULL && i < pos - 1) { p = p->pNext; i++; } if (p->pNext == NULL || i > pos - 1) { return -1; } *pVal = p->pNext->data; PNODE q = p->pNext; p->pNext = p->pNext->pNext; free(q); return 0;}int main(){ int val; PNODE pHead = create_list(); traverse_list(pHead); if (delete_list(pHead, 3, &val) == 0) { printf("删除成功,您删除的元素是:%d\n", val); } else { printf("删除失败\n"); } traverse_list(pHead); return 0;}
- 单链表的C语言算法实现
- C语言实现单链表翻转的递归算法
- 数据结构与算法分析 C语言描述 单链表的实现
- 单链表的实现 来自算法精解-c语言描述
- 《数据结构与算法》-单链表基本操作的C语言实现
- 单链表的基本算法1---C语言实现
- 单链表的基本算法2---C语言实现
- lzw压缩算法的c语言实现
- 基本排序算法的C语言实现
- 插入排序算法的C语言实现
- 选择排序算法的C语言实现
- 线性查找算法的C语言实现
- KMP算法的C语言代码实现
- 电梯算法的C语言实现
- 直线DDA算法的C语言实现
- lzw压缩算法的c语言实现
- 拓扑算法的C语言实现
- 《算法导论》中红黑树的C语言实现
- python 使用注意事项
- 或操作指令OR
- Idea 1
- Mongodb入门篇
- 容器:C++vector用法 VS C#list用法
- 单链表的C语言算法实现
- gets和scanf区别,使用gets输入经常出现一闪而过的问题
- uva 11646 - Athletics Track
- 二叉树算法(数据结构)
- 5 free project management applications you must try
- NO0:重新拾起C语言
- 决策树算法学习笔记(转载)
- ThreadLocal
- 伪随机数