链表的基本操作
来源:互联网 发布:管家婆软件免费版教程 编辑:程序博客网 时间:2024/06/01 21:46
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//链表的函数声明struct Node;typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;typedef int ElementType;List CreateList(); //创建链表 bool IsEmpty(List L); //检测链表是否为空 bool IsLast(Position P, List L); //检测是否为最后一个元素 Position Find(ElementType X, List L); //链表元素的查找 void Delete(ElementType X, List L); //链表元素的删除 Position FindPrevious(ElementType X, List L); //寻找(要删结点的)前一个元素 void Insert(ElementType X, List L, Position P); //链表元素的插入 void DeleteList(List L); //删除链表 Position Header(List L); //返回链表头结点 Position First(List L); //返回链表第一个元素 void printList(List L); //打印链表 struct Node {ElementType Element;Position Next;}; int main(){int number, flag;ElementType X, X2;Position P; List L; flag = 1; printf("| 链表的基本使用 |\n"); printf("|************************************|\n"); printf("| 1. 创建链表 |\n"); printf("| 2. 销毁链表 |\n"); printf("| 3. 元素的插入 |\n"); printf("| 4. 元素的删除 |\n"); printf("| 5. 元素的查找 |\n"); printf("| 6. 打印链表 |\n"); printf("|************************************|\n"); while (flag) { printf("请选择功能 : \n"); scanf("%d", &number);switch(number) {case 1 :L = CreateList();break; case 2 :if (L) {DeleteList(L);} else printf("链表不存在!!!\n"); break;case 3 :if (L) {printf("请输入需要插入的元素和位置:");printf("(如将X插到5后面则,输入X 5,第一次插入则输入 X, 0 )");scanf("%d%d", &X, &X2);P = Find(X2, L);if (X2 != 0) {while (!P) {printf("该位置不存在!\n");printf("请重新输入需要插入的元素和位置");scanf("%d%d", &X, &X2);P = Find(X2, L);if (X2 == 0)break; }}Insert(X, L, P);} elseprintf("链表不存在!!!\n"); break;case 4 :if (L) {printf("请输入需要删除的元素:");scanf("%d", &X);Delete(X, L);} elseprintf("链表不存在!!!\n"); break; case 5 :if (L) {printf("请输入需要查找的元素:");scanf("%d", &X);if( Find(X, L)) printf("该元素存在!\n"); else printf("该元素不存在!\n"); } elseprintf("链表不存在!!!\n"); break;case 6 :if (L) {printf("链表中元素如下:");printList(L); } elseprintf("链表不存在!!!\n"); break; default :printf("程序运行结束,请按任意键退出!!!\n");flag = 0;} } }List CreateList() //创建链表 {List L;if (!(L = malloc(sizeof(struct Node))))exit(-1);L->Next = NULL;return L;} void DeleteList(List L) //删除链表 {Position P, TmpCell;P = L->Next;L->Next = NULL;while ( P != NULL) {TmpCell = P->Next;free(P);P = TmpCell;}}bool IsEmpty(List L) //检查链表是否为空 {return L->Next == NULL;} Position Find(ElementType X, List L) //查找链表中的元素 {Position P;P = L->Next;while (P != NULL && P->Element != X)P = P->Next;return P;}void Delete(ElementType X, List L) //删除链表中的元素 {Position P, TmpCell;P = FindPrevious(X, L);if (!IsLast(P, L)) {TmpCell = P->Next;P->Next = TmpCell->Next;free(TmpCell);}} Position FindPrevious(ElementType X, List L) //返回前一个元素位置 (配合删除链表使用) {Position P;P = L;while (P->Next != NULL && P->Next->Element != X)P = P->Next ;return P;}void Insert(ElementType X, List L, Position P) //链表元素的插入 {Position TmpCell;if (!(TmpCell = malloc(sizeof(struct Node))))exit(-1);if (P != NULL) { TmpCell->Element = X;TmpCell->Next = P->Next;P->Next = TmpCell;} else { //第一次插入TmpCell->Element = X;TmpCell->Next = L->Next;L->Next = TmpCell;}}Position Header(List L) //返回头结点 {return L;}Position First(List L) //返回第一个元素 {return L->Next;}bool IsLast(Position P, List L) //检查该元素是否为链表最后一个元素 {return P->Next == NULL;}void printList(List L) //打印链表 {Position P;P = L->Next; while (P) {printf("%d -> ", P->Element );P = P->Next; } printf("\n");}
0 0
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 链表的基本操作
- 二、传统定时器的回顾
- hadoop错误总结
- Ubuntu14.04下QT开发环境搭建步骤
- nginx proxy_cache配置说明
- start uml2 文字不能换行
- 链表的基本操作
- 关于”囚徒困境“的见解
- 【LeetCode】165. Compare Version Numbers 解题报告
- 第三方Android 模拟器流畅速度快,适合开发人员
- HDU 1869 六度分离(迪杰斯特拉/优先队列/最短路)
- 点击Android webview的链接,屏蔽其它浏览器,只是在原来的webview中跳转
- 文本编辑器
- javaweb之压缩过滤器
- Google命令行工具gflags使用