2022年C语言数据结构线性表的基本操作实验报告 .pdf
《2022年C语言数据结构线性表的基本操作实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言数据结构线性表的基本操作实验报告 .pdf(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 实验一线性表的基本操作一、实验目的与基本要求1掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。2了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。3掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。4掌握运用 C 语言上机调试线性表的基本方法。二、实验条件1硬件:一台微机2软件:操作系统和C 语言系统三、实验方法确定存储结构后,上机调试实现线性表的基本运算。四、实验内容1建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i 个元素,定位函数(返回第一个与
2、x 相等的元素位置),插入,删除。2建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i 个元素,定位函数(返回第一个与x 相等的元素位置),插入,删除。3假设有两个按数据元素值非递减有序排列的线性表A 和 B,均以顺序表作为存储结构。编写算法将 A 表和 B 表归并成一个按元素值非递增有序(允许值相同)排列的线性表C。(可以利用将 B 中元素插入 A 中,或新建 C 表)4 假设有两个按数据元素值非递减有序排列的线性表A 和 B,均以单链表作为存储结构。编写算法将A 表和 B 表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C。五
3、、附源程序及算法程序流程图1.源程序(1)源程序(实验要求 1 和 3)#include#include#include#define LIST_INIT_SIZE 100#define LISTINCREMENT 10 typedef struct arr 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 34 页 -2 int*elem;int length;int listsize;Sqlist;void menu();/菜单void InitList(Sqlist*p);/创建线性表void ShowList(Sqlist*p);/输出顺序线性表void ListDelet
4、e(Sqlist*p,int i,int&e);/在顺序线性表中删除第i 个元素,并用e返回其值void ListInsert(Sqlist*p);/在顺序线性表中第i 个元素前插入新元素e void ListEmpty(Sqlist*p);/判断 L 是否为空表void GetList(Sqlist*p,int i,int&e);/用 e 返回 L 中第 i 个数据元素的值void ListInsert(Sqlist*p,int i,int e);bool compare(int a,int b);void LocateElem(Sqlist*L,int e);/在顺序线性表L 中查找第1
5、个值与e 满足compare()d 元素的位序void MergeList_L(Sqlist*La,Sqlist*Lb);/归并void main()Sqlist La;Sqlist Lb;int n,m,x;menu();scanf(%d,&n);while(n)switch(n)case 0:;break;case 1:InitList(&La);break;case 2:ListEmpty(&La);break;case 3:printf(请输入插入的位序:n);scanf(%d,&m);printf(请出入要插入的数:n);scanf(%d,&x);ListInsert(&La,m,x
6、);break;case 4:printf(请输入删除元素的位序:n);scanf(%d,&m);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 34 页 -3 ListDelete(&La,m,x);printf(删除的元素为:%dn,x);break;case 5:printf(请输入要找的与线性表中相等的数:n);scanf(%d,&m);LocateElem(&La,m);break;case 6:printf(请输入查找的位序:n);scanf(%d,&m);GetList(&La,m,x);printf(La 中第%d 个元素的值为%dn,m,x);break;cas
7、e 7:ShowList(&La);break;case 8:InitList(&Lb);break;case 9:MergeList_L(&La,&Lb);printf(归并成功!);break;menu();scanf(%d,&n);/*菜单*/void menu()printf(*nn);printf(0.退出 nn);printf(1.创建线性表Lann);printf(2.判断 La 是否为空表 nn);printf(3.插入元素(La)nn);printf(4.删除元素(La)nn);printf(5.定位元素(La)nn);printf(6.取元素(La)nn);printf(7
8、.输出线性表 nn);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 34 页 -4 printf(8.创建线性表Lbnn);printf(9.归并为一个线性表Lann);printf(*nn);/*创建顺序线性表L*/void InitList(Sqlist*L)int n;int i=0;L-elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int);if(NULL=L-elem)printf(储存分配失败!n);else L-length=0;L-listsize=LIST_INIT_SIZE;printf(输入顺序表a:n);scanf(%d
9、,&n);while(n)L-elemi=n;i+;L-length+;L-listsize=L-listsize-4;scanf(%d,&n);/*输出顺序线性表*/void ShowList(Sqlist*p)int i;if(0=p-length)printf(数组为空!n);else for(i=0;ilength;i+)printf(%d,p-elemi);printf(n);/*判断 L 是否为空表*/void ListEmpty(Sqlist*p)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 34 页 -5 if(0=p-length)printf(L 是空表!n
10、);else printf(L 不是空表!n);/*在顺序线性表中第i 个元素前插入新元素e*/void ListInsert(Sqlist*p,int i,int e)int*newbase;int*q1;int*q2;while(ip-length+1)printf(您输入的i 超出范围!n 请重新输入要插入的位置n:);scanf(%d,&i);if(p-length=p-listsize)newbase=(int*)realloc(p-elem,(p-listsize+LISTINCREMENT)*sizeof(int);if(!newbase)exit(0);else p-elem=
11、newbase;p-listsize+=LISTINCREMENT;q1=&(p-elemi-1);for(q2=&(p-elemp-length-1);q2=q1;-q2)*(q2+1)=*q2;*q1=e;+p-length;/*/在顺序线性表中删除第i 个元素,并用e返回其值*/void ListDelete(Sqlist*p,int i,int&e)int*q1,*q2;while(ip-length)printf(您输入的i 超出范围!请重新输入:);scanf(%d,&i);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 34 页 -6 q1=&(p-elemi-1)
12、;e=*q1;q2=p-elem+p-length-1;for(+q1;q1length;/*对比 a 与 b 相等*/bool compare(int a,int b)if(a=b)return 1;else return 0;/*在顺序线性表L 中查找第1 个值与 e 满足 compare()d 元素的位序*/void LocateElem(Sqlist*L,int e)int i=1;int*p;p=L-elem;while(ilength&!compare(*p+,e)+i;if(ilength)printf(第 1 个与 e 相等的元素的位序为%dn,i);else printf(没
13、有该元素!n);/*用 e返回 L 中第 i 个数据元素的值*/void GetList(Sqlist*p,int i,int&e)Sqlist*p1;p1=p;e=p1-elemi-1;/*已知顺序线性表La 和 Lb 是元素按值非递减排列*/*把 La 和 Lb 归并到 La 上,La 的元素也是按值非递减*/void MergeList_L(Sqlist*La,Sqlist*Lb)int i=0,j=0,k,t;int*newbase;Sqlist*pa,*pb;pa=La;pb=Lb;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 34 页 -7 while(ilengt
14、h&jlength)if(pa-elemi=pb-elemj)if(pa-listsize=0)newbase=(int*)realloc(pa-elem,(pa-listsize+LISTINCREMENT)*sizeof(int);if(!newbase)exit(0);for(k=pa-length-1;k=i;k-)pa-elemk+1=pa-elemk;pa-length+;pa-elemi=pb-elemj;i+;j+;else i+;while(jlength)if(pa-listsize length-j)newbase=(int*)realloc(pa-elem,(pa-li
15、stsize+LISTINCREMENT)*sizeof(int);if(!newbase)exit(0);for(j;jlength;j+,i+)pa-elemi=pb-elemj;pa-length+;for(i=0;ilength/2;i+)t=pa-elemi;pa-elemi=pa-elempa-length-i-1;pa-elempa-length-i-1=t;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 34 页 -8(2)源程序(实验要求 2 和 4)#include#include#include typedef struct LNode int data;s
16、truct LNode*next;LNode,*LinkList;void menu();LinkList InitList();void ShowList(LinkList L);void ListDelete(LinkList L,int i,int&e);void ListEmpty(LinkList L);void GetList(LinkList L,int i,int&e);void ListInsert(LinkList L,int i,int e);bool compare(int a,int b);void LocateElem(LinkList L,int e);LinkL
17、ist MergeList_L(LinkList La,LinkList Lb);int total=0;void main()LinkList La;LinkList Lb;La=(LinkList)malloc(sizeof(struct LNode);La-next=NULL;Lb=(LinkList)malloc(sizeof(struct LNode);Lb-next=NULL;int n;int m;int x;menu();scanf(%d,&n);while(n)switch(n)case 0:;break;case 1:La-next=InitList();break;cas
18、e 2:ListEmpty(La);break;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 34 页 -9 case 3:printf(请输入要插入到第几个节点前:n);scanf(%d,&m);printf(请输入插入的数据:n);scanf(%d,&x);ListInsert(La,m,x);break;case 4:printf(请输入删除元素的位序:n);scanf(%d,&m);ListDelete(La,m,x);printf(删除的元素为:%dn,x);break;case 5:printf(请输入要找的与线性表中相等的数:n);scanf(%d,&m);Loc
19、ateElem(La,m);break;case 6:printf(请输入查找的位序:n);scanf(%d,&m);GetList(La,m,x);printf(La 中第%d 个元素的值为%dn,m,x);break;case 7:ShowList(La);break;case 8:Lb-next=InitList();break;case 9:La=MergeList_L(La,Lb);printf(归并成功 n);break;menu();scanf(%d,&n);void menu()printf(*nn);printf(0.退出 nn);printf(1.创建线性表Lann);pr
20、intf(2.判断是否为空表nn);printf(3.插入元素 nn);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 34 页 -10 printf(4.删除元素 nn);printf(5.定位元素 nn);printf(6.取元素 nn);printf(7.输出线性表 nn);printf(8.创建线性表Lbnn);printf(9.归并两线性表nn);printf(*nn);/创建链式线性表L LinkList InitList()int count=0;LinkList pHead=NULL;LinkList pEnd,pNew;pEnd=pNew=(LinkList)m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言数据结构线性表的基本操作实验报告 2022 语言 数据结构 线性 基本 操作 实验 报告
限制150内