ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:91.97KB ,
资源ID:7139943      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7139943.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验报告线性表及其应用.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验报告线性表及其应用.docx

1、数据结构实验报告线性表及其应用数据结构实验报告(1)姓名: 张惠荣 学号: * 专业班级: 计算机科学与技术153实验目的:帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。问题描述:1、问题描述:构造一个空的线性表L。2、在线性表L的第i个元素之前插入新的元素e;3、在线性表L中删除第i个元素,并用e返回其值。实验要求:1、分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。2、在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。算法分析:顺序结构算法:#define LIST_IN

2、IT_SIZE 100 /线性存储空间的初始分配量#define LISTINCREMENT 10 /线性表存储空间的分配增量typedef struct ElemType *elem;/存储空间基址int length; /当前长度int listsize;/当前分配的存储量Sqlist;Status InitList_Sq( SqList &L ) / 操作结果:构造一个空的顺序线性表 L.elem = (ElemType *) malloc( LIST_INIT_SIZE * sizeof( ElemType ) ); if ( !L.elem ) exit( OVERFLOW ); /

3、 存储分配失败 L.length = 0; / 空表长度为0 L.listsize = LIST_INIT_SIZE; / 初始存储容量 return OK; /InitList_Sq Status ListInsert_Sq (SqList &L,int i ,ElemType e )/在顺序线性表L中第i个元素之前插入新的元素e,/i的合法值为1iListLength(L)+1,If(iListLength(L)+1) return ERROR;/i值不合法If(L.length=L.listsize)/当前存储空间已满,增加分配newbase=(ElemType*)realloc(L.e

4、lem, (L.listsize+LISTINCREATMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW);/存储分配失败L.elem= newbase;/新基址Llistsize+=LISTINCREMENT;/增加存储容量q=&(L.elemi-1);/q为插入位置for(p=(&(L.elemL.length-1);p=q;-p)*(p+1)=*p;/插入位置及之后的元素后移*q=e;/插入e+L.length;/表长增1return OK;/ListInsert_SqStatus ListDelete_Sq (SqList & L,int

5、 i, ElemType e)/在顺序表L中删除第i个元素,并用e返回其值if(iListLength(L) return ERROR;/i值不合法for(p=&(L.elemi) ;pdata=e;LNode *p;p=L.next;int j=1;while(p!=NULL)&(ji-1)p=p.next;j+;p.next=q.next;q=p.next;return OK;/ Insert_LStatus Delete_L(LinkList &L,int i)/删除第i个元素p=L.next;int j=1;while(p!=NULL)&(ji-1)p=p.next;j+;q=p.ne

6、xt;p.next=q.next;e=q.data;free(q);return OK;/ Delete_L实验内容和过程:根据算法设计C语言程序,在visual stdio 上运行。顺序结构程序:#include#include #define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define OVERFLOW 1#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct list ElemType *elem;/存储空间基址 int le

7、ngth;/当前长度 int listsize;/当前分配存储量 Sqlist;/构造一个空的线性表LStatus Initlist_Sq(Sqlist &L) L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType); if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = LIST_INIT_SIZE; return OK;/插入操作函数 Status insert_Sq(Sqlist &L, int i, int e) ElemType *p, *q, *newbase

8、; if (iL.length + 1) return ERROR; if (L.length = L.listsize)/当前存储空间已满,增加分配 newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType); if (!newbase) exit(OVERFLOW); L.elem = newbase; L.listsize += LISTINCREMENT; q = &L.elemi - 1; for (p = (&L.elemL.length - 1); p = q; -p)

9、*(p + 1) = *p; *q = e; +L.length; return OK;/删除操作函数 Status delete_Sq(Sqlist &L, int j) ElemType *p, *q; if (jL.length + 1) return ERROR; for (p = &(L.elemj - 1); p&(L.elemL.length); +p) *p = *(p + 1); -L.length; return OK;void show_Sq(Sqlist L) for (int i = 0; iL.length; i+) printf(%dt, L.elemi); in

10、t main() Sqlist L; int i; int a;/输入元素个数 printf(请输入要创建的元素个数:t); scanf(%d, &a); Initlist_Sq(L); L.length = a; printf(请输入线性表的元素:); getchar(); for (i = 0; ia; i+) scanf(%d, &L.elemi); show_Sq(L);loop:printf(n请输入要进行的操作:n 1.插入n 2.删除n); int k; scanf(%d, &k); switch (k) case 1: int j, e; printf(请输入第i个元素之前插入

11、e:t); getchar(); scanf(%d%d, &i, &e); insert_Sq(L, i, e); show_Sq(L); break; case 2: printf(请输入要删除第i个元素:t); getchar(); scanf(%d, &i); delete_Sq(L, i); show_Sq(L); break; default:printf(输入的数字不正确n); break; printf(n是否还要进行操作?(选择是按 1,选择否按 0):); scanf(%d, &i); if (i = 1) goto loop; return 0;链式结构程序:#includ

12、e#include #define LEN sizeof(struct LNode)typedef int ElemType;typedef struct LNode ElemType data;/数据域 struct LNode *next;/指针域LNode;struct LNode *Init_L() /建立链表 struct LNode *head; struct LNode *p, *q; head = (struct LNode*)malloc(LEN); if (!head) exit(0);/分配内存失败 head-data = 0; head-next = NULL; ret

13、urn(head);struct LNode *creat(struct LNode *head) LNode *p, *q; int a;/输入元素个数 printf(请输入要创建的元素个数:t); scanf(%d, &a); getchar(); int i; for (i = 0; idata); p-next = NULL; if (i = 0) q = p; head-next = p; else q-next = p; q = p; return (head);struct LNode *Insert_L(struct LNode *head, int i, ElemType e

14、)/在第i个元素之前插入e struct LNode *p, *q; q = (struct LNode*)malloc(LEN);/创建插入结点 if (!q) exit(0);/创建失败 q-data = e; p = head-next; int j = 1; while (p != NULL) & (jnext; j+; q-next = p-next; p-next = q; return(head);struct LNode *Delete_L(struct LNode *head, int i)/删除第i个元素 struct LNode *p, *q; ElemType e; p

15、 = head-next; int j = 1; while (p != NULL) & (jnext; j+; q = p-next; p-next = q-next; e = q-data; free(q); return(head);void print(struct LNode *head) int i; LNode *p; p = head-next; while (p != NULL) printf(%dt, p-data); p = p-next; printf(n);int main() struct LNode *head; head = Init_L(); creat(he

16、ad); print(head);loop:printf(n请输入要进行的操作:n 1.插入n 2.删除n); int k; scanf(%d, &k); switch (k) case 1: int i; ElemType e; printf(请输入插入位置及元素(空格隔开)); scanf(%d%d, &i, &e); Insert_L(head, i, e); print(head); break; case 2: int j; printf(删除第j个元素:n); scanf(%d, &j); Delete_L(head, j); print(head); break; printf(n是否还要进行操作?(选择是按 1,选择否按 0):); int i; scanf(%d, &i); if (i = 1) goto loop; return 0;实验结果:顺序结构程序截图:链式结构程序截图:总结和感想:经过这次实验,我们通过C语言程序实现了线性表的几个基本操作,对线性表有了更深入的理解。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1