
线性列表的数据结构描述线性列表的链接列表: 线性列表是最简单的线性结构和最基本的线性结构,因此它不仅是学习的重点,而且是非常普遍的应用程序开发. 数据结构. 它可以分为顺序列表和链接列表. 它的主要操作是数据元素的插入,删除和排序. 接下来,本文将详细说明线性列表(包括在源代码的注释中)的基本操作和用法,并提供可执行程序的源代码. 线性列表与顺序列表不同. 它是一个链式线性列表. 它具有与顺序列表的相似阵列不同的存储特性. 它是一个独立的存储单元,通过中间的指针进行链接,类似于一条链,因此称为链接列表. . 由于它属于线性表,因此其基本操作与序列表相同. 因此,基本操作功能名称相同c 链表实现,但具体实现不同. 序列表的优点是它可以随机存储数据元素,但是在删除和插入操作期间它需要移动很多. 元件. 另一方面,链表不能进行随机访问,但是对于删除和插入操作非常方便. 它只需要修改指针并释放已删除元素的存储空间. 程序分析: 由于程序执行时操作尽可能简单,因此一目了然,因此该程序使用大量提示语句. 主功能的结构是while循环和切换功能的组合,因此可以在主显示功能中尽可能清晰地显示每个可以使用的基本操作,从而可以更好地发挥每个基本操作的作用. 突出.

这不仅使程序尽可能模块化,而且使源代码更具可读性. 此外,程序还使用CLS屏幕清除功能使每个操作的输入和输出结果更加清晰. 源代码: #include #include #include #define OK1 #define ERROW -1 #define OVERFLOW -2#define LEN sizeof(struct Lnode)#define LN LNode * typedef int状态; typedef int ElemType; / *链表的节点的数据结构* / typedef struct Lnode(ElemType num; //为了数据字段的方便c 链表实现,仅一个struct Lnode * next;)LNode * LinkList; // * LinkList L定义指向链表头的指针/ *链表的初始构造函数* /状态InitList(LinkList&L)(L =(LN)malloc(LEN);如果(L == 0)退出(溢出); L->下一个= NULL;返回OK;} / *清除空列表的数量* /无效ClearList(LinkList&L){LinkList p;而(L-> next){p = L- > next; L-> next = p-> next; free(p);} //最终效果是仅保留头节点} / *破坏函数* / void DestoryList(LinkList&L){ClearList(L) ;; free(L); //释放头节点空间L = NULL; //初始化链表的变量以方便识别和处理} / *获取表长度函数* / Status GetLength(LinkList L){int n; n = 0; if(L == NULL)//没有初始构建函数的构建或已被完全销毁的函数返回n;而(L-> next){L = L-> next; n ++;}返回n; } / *确定表是否为空的函数* / Status IsEmpty(LinkList L){if(L-> next == NULL)返回OK;否则return ERROW;} / *定位值函数* /状态GetElem(LinkList L,int i,ElemType&e){int j = 1; LinkList p; p = L->接下来;而(p && j 接下来; j ++;} if(p == NULL | | j> i)//给定的序列号超过了表的长度{printf(“序列号输入错误!\ n \ n”);返回ERROW;} e = p-> num; return OK;} / *查找定位函数* /状态LocateElem(LinkList L,int&i,ElemType e){i = 1; LinkList p; p = L->接下来; while(p && p-> num!= E){p = p-> next; i ++;} if(p!= NULL)返回OK;否则返回ERROW;} / *创建一个链表* /无效ScanList(LinkList&L){int i;链表p,p0;如果(L == NULL)InitList(L); p0 = L; printf(“请输入链表的长度\ n”); scanf(“%d”,&i); printf(“ \ n请输入%d号\ n”,i);对于(; i> 0; i--){p =(LN)malloc(LEN); p-> next = NULL; scanf(“%d”,&p-> num); p0->下一步= p; p0 = p;}} / *输出表中的所有数据元素* / void PrintList(LinkList L){LinkList p0; p0 = L->接下来; printf(“ \ n”); while(p0!= NULL){printf(“%d”,p0-> num); p0 = p0-> next;} printf(“ \ n”);} / *数据元素插入函数* /状态ListInsert(LinkList&L,int i,ElemType e)(int j = 0; LinkList p,p0; p = L; while(p && j next; j ++;} if(p == NULL || j> i){返回ERROW;} p0 =(LN)malloc( LEN); p0-> num = e; p0-> next = p-> next; p-> next = p0;返回OK;} / *位置删除功能* / Status ListDelete_1(LinkList&L,int i){int j = 0; LinkList p,p0; p = L; while(p && j next; j ++;} if(p == NULL || j> i){返回ERROW;} p0 = p-> next; p-> next = p0-> next; free(p0); return OK;} / *非减少气泡排序函数* / int maopao(LinkList&L){int i, j,t,n; LinkList p,p0; p0 = L; n = GetLength(L);对于(j = 1; j <= n-1; j ++){p0 = p0-> next; p = p0 ; for(i = 1; i <= nj; i ++){if(p-> num> p-> next-> num){t = p-> num; p-> num = p-> next- > num; p-> next-> num = t;} p = p-> next;}}返回OK;} / *主提示功能* / void printlin(){printf(“ \ n”); printf(“ \ t \ t \ t \ n“); printf(“ \ t \ t \ t printf(” \ t \ t \ t printf(“ \ t \ t \ t printf(” \ t \ t \ t printf(“ \ t \ t \ t printf(” \ t \ t \ t printf(“ \ t \ t \ t printf(” \ t \ t \ t printf(“ \ t \ t \ t printf(” \ t \ t \ t \ n“); printf(” \ t \ t \ t} ***主菜单*** \ n \ n“); * 1创建一个链接列表\ n”); * 2定位并输出数据元素\ n“); * 3所有元素在输出列表中\ n“); * 4找到并插入一个数据元素\ n”); * 5找到并删除一个数据元素\ n“); * 6删除一个具有固定值\ n”)的数据; * 7清除链表\ n“); * 8销毁链表\ n”); * 9表示列表中的数据元素素数不减排序* 0结束程序\ n“); int main(){int i,j,k;链表L; L = NULL; printf(“编写该程序的目的是学习链表的线性列表\ n”); printlin();而(1){int t; scanf(“%d”,&t); if(t!= 0)if(t == 1 || GetLength(L)!= 0){开关(t){情况1: if(GetLength(L)!= 0){printf(“链表已经存在,是否会销毁并重新创建?\ n“); printf(“ * 1是* 2 no \ n”); scanf(“%d”,&i);如果(i == 1){DestoryList(L); ScanList(L);}}其他ScanList(L);打破;情况2: {k = GetLength(L); printf(“请输入数据位置\ n”); scanf(“%d”,&i); if(i <1 || i> k)printf(“错误的输入位置\ n”);否则{GetElem(L,i,j); printf(“%d number is%d \ n”,i,j);} break;}情况3: PrintList(L);打破;情况4: {printf(“输入要插入的位置\ n”); scanf(“%d”,&i); printf(“请输入要插入的数据\ n”); scanf(“%d”,&j); k = ListInsert(L,i,j);如果(k ==-1)printf(“非法插入位置,插入数据操作失败!\ n \ n”); else printf(“成功插入数据\ n \ n”); break;}情况5: {printf(“请输入要删除数据的位置\ n”); scanf(“%d”,&i); k = ListDelete_1(L,i);如果(k ==-1)printf(“错误的输入位置,删除操作失败!\ n \ n”); else printf(“删除成功!\ n \ n”);中断;}情况6: {printf(“请输入要删除的元素: \ n”); \ n \ n“); \ n \ n”); scanf(“%d”,&j); k = LocateElem(L,i,j); if(k ==-1)printf(“找不到元素,删除操作失败!else {ListDelete_1(L,i); printf(”!\ N \ n“);} break;}情况7: { ClearList(L); printf(“清除后,返回主菜单\ n \ n”); break;}情况8: {DestoryList(L); printf(“销毁成功,返回主菜单break;}情况9: {maopao(L); printf(“已成功排序,返回主菜单\ n \ n”);中断;}情况0: 中断;默认值: {printf(“输入错误,您可以重新选择,按0退出!\ n \ n“);}}}否则printf(”链表尚未创建或已被清空或销毁,请先创建一个链表\ n \ n“);系统(“暂停” ); system(“ CLS”); printlin(); if(t == 0)break;}返回0;}程序操作的效果: ͼ1ͼ2ͼ3ͼ4结束语: 本文将结束,您将知道要做!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159196-1.html
可采取撞击战术对付美军舰的风声起了作用