数据结构实验报告 线性表的基本操作.docx
《数据结构实验报告 线性表的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告 线性表的基本操作.docx(17页珍藏版)》请在三一办公上搜索。
1、数据结构实验报告 线性表的基本操作一、 实验目的 二、 实验内容和要求 三、 源代码 1) 顺序表的代码 2) 单链表的代码 四、 测试结果 1) 顺序表的测试结果 2) 单链表的测试结果 五、心得体会 实验一 线性表的基本操作及其应用 一、实验目的 1、帮助读者复习C+语言程序设计中的知识。 2、熟悉线性表的逻辑结构。 3、熟悉线性表的基本运算在两种存储结构上的实现。 4、掌握顺序表的存储结构形式及其描述和基本运算的实现。 5、熟练掌握动态链表结构及有关算法的设计 二、实验内容 题目一:顺序表的基本操作 问题描述 实现顺序表的建立、求长度,取元素、修改元素、插入、删除等顺序表的基本操作。 基
2、本要求 依次从键盘读入数据,建立带头结点的顺序表; 输出顺序表中的数据元素 求顺序表的长度; 根据指定条件能够取元素和修改元素; 实现在指定位置插入和删除元素的功能。 根据算法,将两个有序的顺序表合并成一个有序顺序表。 测试数据 由学生任意指定。 题目二:单链表的基本操作 问题描述 实现带头结点的单链表的建立、求长度,取元素、修改元素、插入、删除等单链表的基本操作。 基本要求 依次从键盘读入数据,建立带头结点的单链表; 输出单链表中的数据元素 求单链表的长度; 根据指定条件能够取元素和修改元素; 实现在指定位置插入和删除元素的功能。 根据算法,将两个有序的单链表合并成一个有序单链表。 测试数据
3、 由学生任意指定。 三、源代码 (一) 顺序表的基本操作 #include using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct /结构体 ElemType *elem; int length; int listsize; SqLis
4、t; SqList Lx; Status InitList_Sq(SqList &L) /分配空间 L.elem=new ElemTypeLIST_INIT_SIZE; if(!L.elem)exit(OVERFLOW); L.length =0; L.listsize=LIST_INIT_SIZE; return OK; 2 Status ListInsert(SqList &L,int i,ElemType e) /插入新元素 int *q,*p;ElemType *newbase; if(iL.length+1) return ERROR; if(L.length=L.listsize)
5、 newbase=new ElemTypeL.listsize+LISTINCREMENT; 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 Listlength(SqList L) /长度 int *p=L.elem; /判断线形表是否存在 while(p) return (L.length); Statu
6、s GetElem(SqList L, int i,ElemType &e) /取元素 if(iL.length) return ERROR; else e=L.elemi-1; return e; void MergeList(SqList La,SqList Lb,SqList &Lc) /合并 ElemType ai,bj; InitList_Sq(Lc); 3 int i=1,j=1,k=0; int La_len,Lb_len; La_len=Listlength(La); Lb_len=Listlength(Lb); while(i=La_len)&(j=Lb_len) GetEl
7、em(La,i,ai);GetElem(Lb,j,bj); if(ai=bj) ListInsert(Lc,+k,ai);+i; else ListInsert(Lc,+k,bj);+j; while(i=La_len) GetElem(La,i+,ai); ListInsert(Lc,+k,ai); while(j=Lb_len) GetElem(Lb,j+,bj); ListInsert(Lc,+k,bj); void show(SqList L,int i) / int j;ElemType k; cout顺序表显示如下:endl; for(j=0;ji-1;j+) k=L.elemj;
8、 coutk; if(j=i-1 & i0) k=L.elemj; coutk; coutendl; void create(SqList &L,int n) / int e; for(int i=0;ie; L.elemi=e; L.length=i+1; Status ListDelete_Sq(SqList &L,int i,ElemType &e) /删除 ElemType *p, *q; if(iL.length) return ERROR; p=&(L.elemi-1); e=*p; q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L
9、.length; return OK; Status Listxiugei(SqList &L,int i,ElemType &e) /修改 if(iL.length) return ERROR; else L.elemi-1=e; return OK; void shuru(SqList &L1) /顺序表的创建 int a; InitList_Sq(L1); couta; cout请输入顺序表的元素(共a个)endl; create(L1,a); show(L1,a); void chaxun(SqList &L1) /取第i个位置的元素 int j;ElemType e1; coutj;
10、 while(jListlength(L1) cout输入有误,请重新输入endl; coutj; GetElem(L1,j,e1); cout取出的元素为:e1endl; void xiugai(SqList &L1) /修改第i个位置的元素 int a; int j; ElemType e1; a=L1.length; coutj; while(jListlength(L1) cout输入有误,请重新输入endl; coutj; coute1; Listxiugei(L1,j,e1); cout修改后的顺序表数据:endl; show(L1,a); void shanchu(SqList
11、&L1) /删除顺序表里的元素 int a; int j; ElemType e1; a=L1.length; coutj; while(jListlength(L1) cout输入有误,请重新输入endl; coutj; 6 ListDelete_Sq(L1,j,e1); cout修改后的顺序表数据:endl; show(L1,a-1); void charu(SqList &L1) /插入元素到顺序表里 int a; int j; ElemType e1; a=L1.length; coutj; while(jListlength(L1) cout输入有误,请重新输入endl; coutj
12、; coute1; ListInsert(L1,j,e1); cout修改后的顺序表数据:endl; show(L1,a+1); void hebing(SqList &L3) /合并两个顺序表 SqList L1,L2; int a,b; InitList_Sq(L1); InitList_Sq(L2); couta; cout请输入第一个有序表的元素(共a个)endl; create(L1,a); show(L1,a); coutb; cout请输入第二个有序表的元素(共b个)endl; create(L2,b); show(L2,b); MergeList(L1,L2,L3); cout
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验报告 线性表的基本操作 数据结构 实验 报告 线性 基本 操作
链接地址:https://www.31ppt.com/p-3560191.html