《数据结构实验报告-顺序表的创建、遍历及有序合并操作.doc》由会员分享,可在线阅读,更多相关《数据结构实验报告-顺序表的创建、遍历及有序合并操作.doc(11页珍藏版)》请在金锄头文库上搜索。
1、数据结构实验报告-顺序表的创建、遍历及有序合并操作二、实验内容与步骤实现顺序表的创建、遍历及有序合并操作,基本数据结构定义如下:typedef int ElemType;#define MAXSIZE 100#define FALSE 0#define TRUE 1typedef structElemType dataMAXSIZE; int length;seqlist;创建顺序表,遍历顺序表#includestdio。h#includestdlib.hdefine MAXSIZE 100#define Icreament 20define FALSE 0define TRUE 1typed
2、ef int ElemType; /用户自定义数据元素类型/ 顺序表结构体的定义typedef struct ElemType elem; /顺序表的基地址 int length; /顺序表的当前长度 int listsize; /预设空间容量SqList; /线性表的顺序存储结构SqList InitList() /创建空的顺序表 SqList L = (SqList*)malloc(sizeof(SqList);/定义顺序表L if(!L) printf(空间划分失败,程序退出n); return NULL; Lelem=(ElemType *)malloc(MAXSIZE*sizeof(
3、ElemType); if(!Lelem) printf(”空间划分失败,程序退出n”); return NULL; Llength=0; Llistsize=MAXSIZE; return L;int CreateList(SqList* L) /创建顺序表(非空) int number; /顺序表中元素的个数 int i; /循环变量 printf(”请输入顺序表中元素的个数:); scanf(”d”,&number); if(number MAXSIZE) /一定要判断输入的个数是否大于顺序表的最大长度 printf(”输入个数大于顺序表的长度n); return 0; for(i=0;
4、inumber;i+) printf(输入第%d个数: ,i+1); scanf(%d,L-elem+i); /Lelem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址 /给顺序表中每个数据元素赋值 L-length=number; /当前顺序表的长度 return 1;void print(SqList L) /遍历顺序表 int i; printf(n开始遍历顺序表n); for(i=0;iL-length;i+) printf(%d,*(L-elem + i); /L-elem+i:和输入是一个道理 printf(”n遍历结束n”); printf(”n”)
5、;int main() SqList* L = InitList(); /申请一个指向顺序表的指针,并对其初始化 if(!L) /判断申请是否成功 printf(初始化线性表失败n); return 1; if(!CreateList(L)) /判断创建顺序表是否成功 printf(”创建顺序表失败n”); return 1; print(L); /打印顺序表与上面遍历顺序表相对应,若没有就不遍历 free(Lelem); /释放申请的顺序表元素的内存 free(L); /释放申请的顺序表内存 return 0;表的有序合并#include stdio.h#include size;j+)if
6、(sdatai=s-dataj)temp=s-datai;s-datai=s-dataj;sdataj=temp;/两个有序顺序表连接函数void combine(seqlist *s1 , seqlist s2 , seqlist *s3 )inti=0 ;int j=0 ;int k=0 ;while( i s1size & j s2-size)if(s1-dataidataj)s3-datak=s1-datai;i+;elses3-datak=s2dataj;j+;k+;if(i=s1size)while(jsize)s3-datak=s2-dataj;k+;j+;if(j=s2-siz
7、e)while(idatai;k+;i+;s3-size=k;/主函数 int main()int i ;int j ;int x ;int n ;seqlist list1 ;seqlist list2 ;seqlist list3 ;init(list1);printf(第一个顺序表元素个数:n”);scanf(%d ,&n) ;printf(”第一个顺序表输入:n);for(i=0 ; in ; i+)scanf(”%d,list1。datai) ;list1.size+ ;sort(&list1);/第一个表排序init(list2);printf(第二个顺序表元素个数:n);scanf(%d ,&n) ;printf(”第二个顺序表输入:n);for(i=0 ; in ; i+)scanf(”%d”,&list2.datai) ;list2.size+ ;sort(list2);/第二个表排序init(list3) ;combine(list1 ,&list2 ,&list3) ;printf(”表一与表二连接后:n) ;display(list3) ;return 0;