顺序表的建立及基本操作_第1页
顺序表的建立及基本操作_第2页
顺序表的建立及基本操作_第3页
顺序表的建立及基本操作_第4页
顺序表的建立及基本操作_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 顺序表的建立及基本操作方法实现实验预备知识:1熟练运用指针进行程序设计,掌握结构体指针。2掌握使用结构体指针访问结构体变量。3掌握指针作为函数的参数使用。一、实验目的1. 理解和掌握线性表的类型定义方法。2. 掌握顺序表中的基本运算,包括顺序表的创建、元素的添加、删除,判空及判满等基本操作。二、实验要求(本次实验要求上交)【题目1】-验证型以下顺序表的基本操作已经给出,请进行验证。源程序见附录部分测试数据:10 20请将源程序附录于此:#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100#de

2、fine Icreament 20typedef 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; L->elem=(Ele

3、mType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L->elem) printf("空间划分失败,程序退出n"); return NULL; L->length=0; L->listsize=LIST_INIT_SIZE; return L;int CreateList(SqList* L) /创建顺序表(非空) int number; /顺序表中元素的个数 int i; /循环变量 printf("请输入插入元素的个数:"); scanf("%d",&n

4、umber); if(number > LIST_INIT_SIZE) /一定要判断输入的个数是否大于顺序表的最大长度 printf("输入个数大于顺序表的长度n"); return 0; for(i=0;i<number;i+) printf("输入第%d个数: ",i+1); scanf("%d",L->elem+i); /L->elem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址 /给顺序表中每个数据元素赋值L->length=number; /当前顺序表的长度 re

5、turn 1;void print(SqList* L) /输出当前顺序表 int i; printf("输出:n"); for(i=0;i<L->length;i+) printf("第%d个数:%-3dn",i+1,*(L->elem + i); /L->elem+i:和输入是一个道理 printf("顺序表长度为:%dn", L->length); printf("n");int main() SqList* L = InitList(); /申请一个指向顺序表的指针,并对其初始

6、化 if(!L) /判断申请是否成功 printf("初始化线性表失败n"); return 1; if(!CreateList(L) /判断创建顺序表是否成功 printf("创建顺序表失败n"); return 1; print(L); /打印顺序表 free(L->elem); /释放申请的顺序表元素的内存 free(L); /释放申请的顺序表内存 return 0;请将运行结果图附录于此【题目2】(1) 有一个表元素按值递增排列的顺序表,编写一个函数实现删除顺序表中多余的值相同元素(2) 有一个顺序表,编写一个在顺序表中查找最大和最小值元素

7、的函数,并分析其时间复杂度算法分析:问题1:输入元素的个数问题2:排序的次数请将源程序附录于此:#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct ArrListint *arr;int length;List;List *Init(int n) List *L=(List*)malloc(sizeof(List);L->arr=(int *)malloc(sizeof(int)*n);L->length=0;return L;/输入元素 void input(L

8、ist *L,int n) int i; int x; printf("请输入%d个数n",n); for(i=0;i<n;i+) while(!(scanf("%d",&x) printf("输入错误请重新输入!n"); scanf("%*cn"); scanf("%*c"); L->arri=x; +L->length; /输出元素 void display(List *L,int n)int i; for(i=0;i<n;i+) printf("第

9、%d一个元素是;%dn",i+1,L->arri); /顺序表的清空void clearList(List *L) free(L->arr);L->length=0;free(L);L=NULL;/元素长度 int ListLength(List *L)return L->length;/对元素排序 void swap(List *L)int i;for(i=0;i<L->length;i+)if(L->arri>L->arri+1&&i+1!=L->length)int temp=L->arri;L-

10、>arri=L->arri+1;L->arri+1=temp;/删除重复元素 void DelList(List *L) int i=0;int n=0;for(i=0;i<L->length;i+)if(L->arri=L->arri+1)n=i;while(n<L->length)L->arrn=L->arrn+1;n+; -L->length;/输出最大最小元素 void maxmin(List *L) int min=L->arr0; int max=L->arr0; int i; for(i=1;i&

11、lt;L->length;i+) if(min>L->arri) min=L->arri; if(max<L->arri) max=L->arri; printf("最大元素是;%dn最小元素是;%dn",max,min);int main()int n;printf("请输入插入元素的个数:");scanf("%d",&n);List *L=Init(n);input(L,n);display(L,n);swap(L);printf("顺序表长度是;%dn",L->length); DelList(L); display(L,L->length); printf("顺序表长度是;%dn",L->length);maxmin(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论