




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实验报告(1)姓名: 张惠荣 学号: 6103115102 专业班级: 计算机科学与技术153实验目的:帮助学生掌握线性表的基本操作在顺序和链表这两种存储结构上的实现,尤以链表的操作和应用作为重点。问题描述:1、 问题描述:构造一个空的线性表L。2、 在线性表L的第i个元素之前插入新的元素e;3、 在线性表L中删除第i个元素,并用e返回其值。实验要求:1、 分别利用顺序和链表存储结构实现线性表的存储,并设计出在不同的存储结构中线性表的基本操作算法。2、 在实验过程中,对相同的操作在不同的存储结构下的时间复杂度和空间复杂度进行分析。算法分析:顺序结构算法:#define LIST_INIT_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 ); / 存储分配失败 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.elem, (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 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.next;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 length;/当前长度 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;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)*(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);int 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个元素之前插入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;链式结构程序:#include#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;return(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;elseq-next = p;q = p;return (head);struct LNode *Insert_L(struct LNode *head, int i, ElemType e)/在第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 = 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(head);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);bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地基承载力提升技术方案
- 河道整治项目后期维护与管理方案
- 建筑夜间施工安全方案
- 高速公路项目建设工程方案
- 初中生物竞赛实验技能提升试题及答案
- 氢能产业园加氢站项目建设工程方案
- 2025簿记考试历年真题及答案
- 大武口区填埋场综合治理项目报告表
- 房屋门窗安装技术方案
- 公司编导笔试题目及答案
- 网约车全国公共科目考试题库与答案
- 看守所干警日常管理制度
- 2025年共青团员必背的100个重点知识汇编
- 【《离心泵叶轮的水力设计过程案例综述》2200字】
- 胃手术并发症及处理
- 2025年新闻宣传、新闻采编专业及理论知识考试题(附含答案)
- 2025至2030 中国热成型钢(PHS)行业现状调查与前景策略研究报告
- 执法监督培训课件
- 股权投资基金培训课件
- 千川投手培训课件
- 2025年中国注塑机熔胶筒螺杆市场调查研究报告
评论
0/150
提交评论