大话数据结构02线性表链式存储

上传人:s****a 文档编号:168801721 上传时间:2022-11-12 格式:DOCX 页数:13 大小:18.46KB
收藏 版权申诉 举报 下载
大话数据结构02线性表链式存储_第1页
第1页 / 共13页
大话数据结构02线性表链式存储_第2页
第2页 / 共13页
大话数据结构02线性表链式存储_第3页
第3页 / 共13页
资源描述:

《大话数据结构02线性表链式存储》由会员分享,可在线阅读,更多相关《大话数据结构02线性表链式存储(13页珍藏版)》请在装配图网上搜索。

1、#include stdio.h#include string.h#include ctype.h#include stdlib.h#include io.h#include math.h#include time.h#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等*/typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为

2、int */Status visit(ElemType c)printf(%d ,c);return OK;typedef struct NodeElemType data;struct Node *next;Node;typedef struct Node *LinkList; /* 定义 LinkList */* 初始化顺序线性表 */Status InitList(LinkList *L)*L=(LinkList)malloc(sizeof(Node); /* 产生头结点, 并使 L 指向此头结点 */if(!(*L) /* 存储分配失败 */return ERROR;(*L)-next

3、=NULL; /* 指针域为空 */return OK;/*初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返 回 FALSE */Status ListEmpty(LinkList L)if(L-next)return FALSE;elsereturn TRUE;/*初始条件:顺序线性表L已存在。操作结果:将L重置为空表*/Status ClearList(LinkList *L)LinkList p,q;/* P指向第一个结点*/p=(*L)-next;while(p)/* 没到表尾 */q=P-next;free(P);P=q;(*L)-next=NULL; /*

4、 头结点指针域为空 */ return OK;/*初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数*/int ListLength(LinkList L)int i=0;LinkList P=L-next; /* P 指向第一个结点 */while(P)i+;P=P-next;return i;/*初始条件:顺序线性表L已存在,linext;/*让p指向链表L的第一个结点*/j = 1; /* j 为计数器 */while (p & jvi) /* p不为空或者计数器j还没有等于i时,循环继续*/p = p-next; /*让p指向下一个结点*/+j;if ( !p | ji )r

5、eturn ERROR; /* 第 i 个元素不存在 */*e = p-data; /*取第i个元素的数据*/return OK;/* 初始条件:顺序线性表 L 已存在 */ 官场小说/*操作结果:返回L中第1个与e满足关系的数据元素的位序。*/* 若这样的数据元素不存在,则返回值为0 */int LocateElem(LinkList L,ElemType e)int i=0;LinkList p=L-next;while(p)if(p-data=e) /* 找到这样的数据元素 */return i;p=p-next;return 0;/*初始条件:顺序线性表L已存在,liListLengt

6、h(L) , */*操作结果:在L中第i个位置之前插入新的数据元素e , L的长度加1 */Status ListInsert(LinkList *L,int i,ElemType e)int j;LinkList p,s;p = *L;j = 1;while (p & j next;+j;if (!p | j i)return ERROR; /* 第 i 个元素不存在 */s = (LinkList)malloc(sizeof(Node); /* 生成新结点(C 语言标准函数)*/ s-data = e;s-next = p-next; /*将p的后继结点赋值给s的后继*/return OK

7、;/*初始条件:顺序线性表L已存在,linext & j next;+j;if (!(p-next) | j i)return ERROR; /* 第 i 个元素不存在 */q = p-next;p-next = q-next;/*将q的后继赋值给p的后继*/*e = q-data;/*将q结点中的数据给e */free(q);/* 让系统回收此结点,释放内存 */return OK;/*初始条件:顺序线性表L已存在*/*操作结果:依次对L的每个数据元素输出*/Status ListTraverse(LinkList L)LinkLisr PHLvnexcwhi-e(p)宀visApvdaET

8、rPHPvnexcprw(=w);return OKss n 9 m渊sm、l (Im :_Q.creareLisrHeadcnkusr *L、inr n)LinkLisr 3互一;srand(!zr.me(o)j 7s左圈sis-ew %一*L H (LinkLisma=oc(sizeof(Node)jQLvvnexr NULL; 7 半时-曲洋辞、5DTS-B溝丿for (HojAn 二+)宀p H (LinkLisma=oc(sizeof(Node)j、*KFBwfHS*/ pvdaETH rand()100+lj = EfsKFB100 龙牙罟洋+丄pvnexr H (*L)vnexc

9、(*L)vnexr H 3 aM=洋丄/*随机产生n个元素的值,建立带表头结点的单链线性表L (尾插法)*/ void CreateListTail(LinkList *L, int n)LinkList p,r;int i;srand(time(0);/* 初始化随机数种子 */*L = (Li nkList)malloc(sizeof(Node); /* L 为整个线性表 */r=*L;/* r为指向尾部的结点*/for (i=0; idata = rand()%100+1;/* 随机生成100以内的数字 */r-next=p; r = p;r-next = NULL;/* 将表尾终端结点

10、的指针指向新结点 */* 将当前的新结点定义为表尾终端结点 */* 表示当前链表结束 */int main()LinkList L;ElemType e;Status i;int j,k;i=InitList(&L);printf(初始化 L 后:ListLength(L)=%dn,ListLength(L);for(j=1;j=5;j+)i=ListInsert(&L,1,j);printf(在L的表头依次插入1 5后:L.data=);ListTraverse(L);printf(ListLength(L)=%d n,ListLength(L);i=ListEmpty(L);printf(

11、L是否空:i=%d(1:是 0:否)n,i);i=ClearList(&L);printf(清空 L 后:ListLength(L)=%dn,ListLength(L);i=ListEmpty(L);printf(L是否空:i=%d(1:是 0:否)n,i);for(j=1;j=10;j+)ListInsert(&L,j,j);printf(在L的表尾依次插入1 10后:L.data=);ListTraverse(L);printf(ListLength(L)=%d n,ListLength(L);ListInsert(&L,1,0);printf(在L的表头插入0后:L.data=);Lis

12、tTraverse(L);printf(ListLength(L)=%d n,ListLength(L);GetElem(L,5,&e);printf(第5个元素的值为:%dn,e);for(j=3;j=k;j-)i=ListDelete(&L,j,&e); /* 删除第 j 个数据 */ if(i=ERROR)prin tf(删除第d个数据失败n ,j);elseprintf(删除第d个的元素值为:%dn,j,e);printf(依次输出L的元素:);ListTraverse(L);j=5;ListDelete(&L,j,&e); /*删除第5个数据 */printf(删除第d(的元素值为:

13、%dn,j,e);printf(依次输出L的元素:);ListTraverse(L);i=ClearList(&L);printf(n 清空 L 后: ListLength(L)=%dn,ListLength(L);CreateListHead(&L,20);printf(整体创建L的元素(头插法):);ListTraverse(L);i=ClearList(&L);printf(n 删除 L 后:ListLength(L)=%dn,ListLength(L);CreateListTail(&L,20);printf(整体创建L的元素(尾插法):);ListTraverse(L);return 0;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!