实验报告01-顺序表的基本操作

合集下载

顺序表基本操作

顺序表基本操作

实验1:顺序表实验(4学时)一.实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构对线性表的一些基本操作和具体的函数定义。

2.掌握顺序表的基本操作,实现顺序表的插入,删除,查找基本运算。

3.掌握对于多函数程序的输入,编辑,调试和运算过程。

二.实验要求1.预习C语言中结构体的定义和基本的操作方法。

2.对顺序表每个基本操作用一个单独函数实现。

3.编写完整程序完成下面实验内容并且上机运行。

三.实验内容编写完整程序完成下面基本操作并且上机运行1.初始化顺序表La;2.将顺序表La设置为空表;3.测试顺序表La是否上空表;4.在顺序表La插入一个新元素;5.删除顺序表La中某个元素;6. 在顺序表La中查找某个元素,查找成功,返回位序,否则返回0;7. 建立顺序表La;8. 打印顺序表La所有元素;9. 输入n个元素建立顺序表La;10. 归并非递减表La和Lb成为非递减表Lc要求编写一个主菜单调用上面各个基本操作。

;程序:#include <stdio.h>#include <conio.h>#include <stdlib.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 3#define TRUE 1#define FALSE 0#define OK 1#define ERROR -1#define OVERFLOW -2typedef int status;typedef int Elemtype;typedef struct {int *elem;int length;int listsize;}sqlist;status Printf_sq(sqlist *L){if(!L) return ERROR;else for(int i=0;i<L->length;i++)printf("%d",L->elem[i]);return OK;}status InitList_Sq(sqlist *L) {L->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype));if(!L->elem) return ERROR;//如果用exit的话一但退出就退出整个程序L->length=0;L->listsize=LIST_INIT_SIZE;L->elem[0]=0;L->elem[1]=1;L->elem[2]=2;L->length=3;Printf_sq(L);return OK; }status ClearList_sq(sqlist *L){L->length=0;Printf_sq(L);return OK;}status ListEmpty_sq(sqlist *L){if(L->length==0) return OK;else return ERROR;}status ListInsert_sq(sqlist *L,int i,int e){int *q,*p;if (i<1 || i>L->length+1)return ERROR;if (L->length >= L->listsize) {int *newbase;newbase = (Elemtype *) realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof (Elemtype));L->elem = newbase;L->listsize += LISTINCREMENT;}q = &(L->elem[i-1]);for (p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;*q = e;++L->length;Printf_sq(L);return OK;}status ListDelete_sq(sqlist *L,int i,int e){int *q,*p;if((i<1)||(i>L->length)) return ERROR;p=&(L->elem[i-1]);e=*p;q=L->elem+L->length-1;for(++p;p<=q;++p)*(p-1)=*p;--L->length;Printf_sq(L);return OK;}status LocateElem_sq(sqlist *L, int e){for(int i=0;i<L->listsize;i++){if(L->elem[i]==e)return i;if(i==LIST_INIT_SIZE)return OVERFLOW;}return OK;}status Creat_sq(sqlist *L){L->elem=(Elemtype *)malloc(LIST_INIT_SIZE*sizeof(Elemtype)); if(!L->elem) return ERROR;L->length=0;L->listsize=LIST_INIT_SIZE;L->elem[0]=0;L->elem[1]=1;L->elem[2]=2;L->length=3;Printf_sq(L);return OK;}void MergeList_Sq(sqlist La, sqlist Lb, sqlist &Lc) {int *pa,*pb,*pc,*pa_last,*pb_last;pa = La.elem; pb = Lb.elem;Lc.listsize = Lc.length = La.length+Lb.length;pc = Lc.elem = (Elemtype *)malloc(Lc.listsize*sizeof(Elemtype)); if (!Lc.elem)exit(OVERFLOW);pa_last = La.elem+La.length-1;pb_last = Lb.elem+Lb.length-1;while (pa <= pa_last && pb <= pb_last) {if (*pa <= *pb) *pc++ = *pa++;else *pc++ = *pb++;}while (pa <= pa_last) *pc++ = *pa++;while (pb <= pb_last) *pc++ = *pb++;Printf_sq(&Lc);}void main(){int e=1;int i=1;sqlist La,Lb,Lc,Ld,Le,Lf,Lg,Lh;InitList_Sq( &La);InitList_Sq( &Lb);InitList_Sq( &Lc);InitList_Sq( &Ld);InitList_Sq( &Le);InitList_Sq( &Lf);InitList_Sq( &Lg);InitList_Sq( &Lh);ClearList_sq(&Lb);ListEmpty_sq(&Lc);ListInsert_sq(&Ld,i,e);ListDelete_sq(&Le,i,e);LocateElem_sq(&Lf, e);Creat_sq(&Lg);Printf_sq(&Lg);MergeList_Sq(La, Lb, Lh);}实验2:单链表实验(6学时)一实验目的1.学会定义线性表的链表存储类型,实现C程序的基本结构对线性表的一些基本操作和具体的函数定义。

顺序表的基本操作实验报告

顺序表的基本操作实验报告

竭诚为您提供优质文档/双击可除顺序表的基本操作实验报告篇一:顺序表的基本操作--实验报告实验报告附:源程序:#include#definemaxsize100#defineerror0#defineok1typedefstruct{intelem[maxsize];intlast;}seqList;intInsList(seqList*L,inta,inti);intLocate(seqListL,inte);intDel(seqList*L,inti);voidmain(){inti,e,a;intlist1,list2;if(L.elem[st]==-1)seqListL;st=0;for(i=0;i list1=InsList(if(list1){}elseprintf("插入失败!");printf("要查找的元素为\n");scanf("%d",printf("插入后的顺序表为:\n");for(i=0;i list2=Locate(L,e);if(!list2)printf("该元素不存在\n");}printf("该元素所在位置的序号为:%d\n",list2);/*删除元素*/printf("是否要删除该元素?\n");intm;scanf("%d",if(m){Del(printf("删除后的顺序表为:\n");for(i=0;iintInsList(seqList*L,inta,inti)//i位置,下标i-1{for(p=L->last;p>=i-1;p--)L->elem[p+1]=L->elem[p];in tp;if(L->last>=maxsize-1){}printf("表已满,无法插入");return(error);L->elem[i-1]=a;L->last++;return(ok );intLocate(seqListL,inte){}intDel(seqList*L,inti){}for(k=i;klast;k++)L->elem[k-1]=L->elem[k];intk ;inti=0;while((ilast--;returnok;篇二:线性表的基本操作实验报告实验一:线性表的基本操作【实验目的】学习掌握线性表的顺序存储结构、链式存储结构的设计与操作。

顺序表的基本操作实验报告

顺序表的基本操作实验报告

顺序表的基本操作实验报告一、实验目的本次实验旨在深入理解和掌握顺序表的基本操作,包括顺序表的创建、插入、删除、查找和遍历等功能,并通过实际编程实现,加深对数据结构中顺序存储结构的理解和应用能力。

二、实验环境本次实验使用的编程语言为 C 语言,编程环境为 Visual Studio 2019。

三、实验原理顺序表是一种线性表的顺序存储结构,它使用一组连续的存储单元依次存储线性表中的元素。

在顺序表中,元素的逻辑顺序与物理顺序是一致的。

顺序表的基本操作包括:1、创建顺序表:为顺序表分配存储空间,并初始化相关参数。

2、插入操作:在指定位置插入元素,需要移动后续元素以腾出空间。

3、删除操作:删除指定位置的元素,并将后续元素向前移动。

4、查找操作:在顺序表中查找指定元素,返回其位置或表示未找到。

5、遍历操作:依次访问顺序表中的每个元素。

四、实验步骤1、定义顺序表的数据结构```cdefine MAXSIZE 100 //定义顺序表的最大长度typedef struct {int dataMAXSIZE; //存储顺序表元素的数组int length; //顺序表的当前长度} SeqList;```2、顺序表的创建```cvoid InitList(SeqList L) {L>length = 0; //初始化顺序表长度为 0}```3、顺序表的插入操作```cint InsertList(SeqList L, int i, int e) {if (L>length >= MAXSIZE) {//顺序表已满return 0;}if (i < 1 || i > L>length + 1) {//插入位置不合法return 0;}for (int j = L>length; j >= i; j) {//移动元素为插入腾出位置L>dataj = L>dataj 1;}L>datai 1 = e; //插入元素L>length++;//顺序表长度增加 1return 1;}```4、顺序表的删除操作```cint DeleteList(SeqList L, int i) {if (i < 1 || i > L>length) {//删除位置不合法return 0;}for (int j = i; j < L>length; j++){//移动元素填补删除位置L>dataj 1 = L>dataj;}L>length; //顺序表长度减少 1return 1;}```5、顺序表的查找操作```cint SearchList(SeqList L, int e) {for (int i = 0; i < Llength; i++){if (Ldatai == e) {//找到元素return i + 1;}}return 0; //未找到元素}```6、顺序表的遍历操作```cvoid TraverseList(SeqList L) {for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);//输出顺序表中的元素}printf("\n");}```五、实验结果与分析1、测试创建顺序表```cSeqList L;InitList(&L);```创建成功,顺序表初始长度为 0。

数据结构实验一_顺序表的基本操作实验报告

数据结构实验一_顺序表的基本操作实验报告

实验一顺序表的基本操作一、实验目的掌握线性表的顺序表基本操作:建立、插入、删除、查找、合并、打印等运算。

二、实验要求包含有头文件和main函数;1.格式正确,语句采用缩进格式;2.设计子函数实现题目要求的功能;3.编译、连接通过,熟练使用命令键;4.运行结果正确,输入输出有提示,格式美观。

三、实验设备、材料和工具1.奔腾2计算机或以上机型2.turboc2,win-tc四、实验内容和步骤1. 建立一个含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2. 往该顺序表中第i位置插入一个值为x的数据元素。

3. 从该顺序表中第j位置删除一个数据元素,由y返回。

4. 从该顺序表中查找一个值为e的数据元素,若找到则返回该数据元素的位置,否则返回“没有找到”。

五、程序#include<stdio.h>#include<stdlib.h>#define list_init_size 10#define increment 2typedef struct {int *elem;int length,listsize;}sqlist; //类型定义void initlist_sq(sqlist &L) //初始化顺序表{ }void output(sqlist L) //输出顺序表{ }void insertlist(sqlist &L,int i, int x) //顺序表中插入x{ }void deletelist(sqlist &L,int j, int y) //顺序表中删除y{ }int locateelem(sqlist &L,int e) //顺序表中查找e{ }void main(){ }【运行结果】void initlist_sq(sqlist &L) //初始化顺序表{L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem) exit (OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;return OK;}void output(sqlist L) //输出顺序表{for(int i=0;i<=L.length-1;i++)printf("%d,",L.elem[i]);return OK;}void insertlist(sqlist &L,int i, int x) //顺序表中插入x{int p,q;if(i<1||i>L.length+1)return ERROR;if(L.length>=L.listsize){newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));if(!newbasde)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1];for(p=&(L.elem[L.length-1]);p>=q;--p*(p+1)=*p;*p=x;++L.length;return ok;}void deletelist(sqlist &L,int j, int y) //顺序表中删除y{int p,q;if(i<1||I>L.length+1) return ERROR;p=&(L.elem[i-1]);y=*p;q=L.elem+L.length-1;for(++p;p<=q;++p)*(p-1)=*p;--L.length;return ok;}int locateelem(sqlist &L,int e) //顺序表中查找e { int p;i=1;p=L.elem;while(i<=L.length&&!(*p++,e))++i;if(i<=L.length) return i;else return 0;}void main(){int d,p,a,b;int c;initlist_sq(&L);output( L);insertlist( &L, d, a);deletelist( &L, p, b);locateelem( &L, c);}。

实验1 顺序表基本操作

实验1 顺序表基本操作

实验1 顺序表基本操作【实验目的】<1>熟悉C语言的上机环境,掌握C语言的基本结构<2>会定义线性表的顺序存储结构<3>熟悉对顺序表的一些基本操作<4>熟悉与线性表相关的函数的定义和使用【实验内容】[实验任务一]顺序表的基本操作1.顺序表的插入操作【操作步骤】<1>启动辅助教学软件<2>选择“C语言”<3>选择“顺序表”<4>选择“顺序表插入”<5>输入建立表的数据<6>输入插入数据元素<7>输入插入位置<8>选择单步执行2.顺序表的删除操作【操作步骤】<1>启动辅助教学软件<2>选择“C语言”<3>选择“顺序表”<4>选择“顺序表插入”<5>输入建立表的数据<6>输入删除位置<7>选择单步执行[实验任务二]编写C语言程序1. 编程实现顺序表的插入操作。

2.编程实现顺序表的删除操作。

实验2 链表的基本操作【实验目的】<1>学会定义单链表的结点类型<2>熟悉单链表的一些基本操作,依据这些操作函数定义<3>掌握线性表的链式存储结构的特点<4>掌握循环链表和双向链表的定义、构造方法等。

【实验内容】[实验任务一]验证单链表的基本操作<1>单链表的插入操作<2>单链表的删除操作[实验任务二]编写C语言程序<1>用C语言实现构造单链表<2>用C语言实现输出单链表实验3 二叉树的基本操作【实验目的】<1>熟悉二叉树的结点结构<2>熟悉二叉树的基本操作<3>学会利用递归方法编写二叉树的遍历算法【实验内容】[实验任务一]二叉树的遍历<1>先序遍历<2>中序遍历<3>后续遍历[实验任务二]编写算法<1>根据二叉树的任一遍历算法,编写求二叉树中结点个数的算法。

顺序表实验报告

顺序表实验报告

实验一顺序表的基本操作及其应用一、需求分析1.本演示程序实现顺序表的初始化,依次从键盘读入数据,建立顺序表、表中元素的连续追加、求顺序表的长度、检查顺序表是否为空、检查顺序表是否为满、显示顺序表、从顺序表中查找元素、给定元素值找位置、向顺序表中插入元素、从顺序表中删除元素、顺序表的逆序排列等基本操作。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令。

3.程序执行命令包过1)顺序表的初始化;2)连续追加元素建表;3)求顺序表长度;4)检查顺序表是否为空;5)检查顺序表是否为满;6)显示顺序表;7)从顺序表中查找元素;8)给定元素值找位置;9)向顺序表中插入元素;10)从顺序表中删除元素;11)逆序二、概要设计抽象化数据类型线性表的定义如下:ADT List{数据对象:D={ai|ai属于ElemSet,i=1,2,....,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于D,i=2,.....n}基本操作:ListEmpty(L)初始条件:线性表L已存在。

操作结果:若L为空表,则返回TURE,否则返回FLASE。

ListLength(L)初始条件:线性表L已存在。

操作结果:返回L中数据元素个数。

ListInsert(&L,i,e)初始条件:线性表L已存在,1<=i<=ListLength(L)+1。

操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。

ListDelete(&L,i,&e)初始条件:线性表L已存在且非空,1<=i<=ListLength(L)。

操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减一。

ListTraverse(L,visit())初始条件:线性表L已存在。

操作结果:依次对L的每个数据元素调用函数visit()。

实验一顺序表的基本操作实验报告

实验一顺序表的基本操作实验报告

元素之后的所有数据都前移一个位置,最将线性表长减1。

3.顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回0 值。

线性表的动态分配顺序存储结构—C语言实现#define MaxSize 50//存储空间的分配量Typedef char ElemType;Typedef struct{ElemType data[MaxSize];int length; //表长度(表中有多少个元素)}SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) //初始化线性表{L=(SqList *)malloc(sizeof(SqList)); //分配存放线性表的空间L->length=0; //置空线性表长度为0}线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x)/*在顺序表L中第i个元素前插入新元素x*/{ if (i<1||i>L.length+1) return ERROR; /*插入位置不正确则出错*/if (L.length>=MAXLEN)return OVERFLOW;/*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; /*将第i个元素及后续元素位置向后移一位*/L.elem[i-1]=x; /*在第i个元素位置处插入新元素x*/L.length++; /*顺序表L的长度加1*/return OK;}线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e)/*在顺序表L中删除第i个元素*{ if (i<1||i>L.length) return ERROR; /*删除位置不正确则出错*/for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; /*将第i+1个元素及后继元素位置向前移一位*/L.length--;/*顺序表L的长度减1*/return OK;}线性表元素的查找:int LocateElem(SqList *L, ElemType e) //按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++; //查找元素eif (i>=L->length) //未找到时返回0return 0;elsereturn i+1; //找到后返回其逻辑序号}输出线性表:void DispList(SqList *L) //输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false; //参数错误时返回falsee=L->data[i-1]; //取元素值return true; //成功找到元素时返回true}代码:#include <stdio.h>#include <malloc.h>#define MaxSize 50typedef char ElemType;typedef struct{ElemType data[MaxSize];int length;} SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)//初始化线性表{L=(SqList *)malloc(sizeof(SqList));//分配存放线性表的空间L->length=0;//置空线性表长度为0 }void DestroyList(SqList *L)//销毁线性表{free(L);}bool ListEmpty(SqList *L)//判线性表是否为空表{return(L->length==0);}int ListLength(SqList *L)//求线性表的长度{return(L->length);}void DispList(SqList *L)//输出线性表{int i;if (ListEmpty(L)) return;for (i=0;i<L->length;i++)printf("%c ",L->data[i]);printf("\n");}bool GetElem(SqList *L,int i,ElemType &e)//求线性表中某个数据元素值{if (i<1 || i>L->length)return false;//参数错误时返回falsee=L->data[i-1];//取元素值return true;//成功找到元素时返回true}int LocateElem(SqList *L, ElemType e)//按元素值查找{int i=0;while (i<L->length && L->data[i]!=e)i++;//查找元素eif (i>=L->length)//未找到时返回0return 0;elsereturn i+1;//找到后返回其逻辑序号}bool ListInsert(SqList *&L,int i,ElemType e)//插入数据元素{int j;if (i<1 || i>L->length+1)return false;//参数错误时返回falsei--;//将顺序表逻辑序号转化为物理序号for (j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置L->data[j]=L->data[j-1];L->data[i]=e;//插入元素eL->length++;//顺序表长度增1return true;//成功插入返回true}bool ListDelete(SqList *&L,int i,ElemType &e)//删除数据元素{int j;if (i<1 || i>L->length)//参数错误时返回falsereturn false;i--;//将顺序表逻辑序号转化为物理序号e=L->data[i];for (j=i;j<L->length-1;j++)//将data[i]之后的元素前移一个位置L->data[j]=L->data[j+1];L->length--;//顺序表长度减1return true;//成功删除返回true}void main(){SqList *L;ElemType e;printf("顺序表的基本运算如下:\n");printf(" (1)初始化顺序表L\n");InitList(L);printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');printf(" (3)输出顺序表L:");DispList(L);printf(" (4)顺序表L长度=%d\n",ListLength(L));printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));GetElem(L,3,e);printf(" (6)顺序表L的第3个元素=%c\n",e);实验结果:心得体会:通过本次实验,实现了数据结构在程序设计上的作用,了解了数据结构语言,加深了对c语言的认识掌并掌握了线性表的顺序存储结构的表示和实现方法,掌握顺序表基本操作的算法实现,同时了解了顺序表的应用。

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)

顺序表的基本操作和实现实验报告(一)顺序表的基本操作和实现实验报告1. 引言顺序表是计算机科学中一种常用的数据结构,用于存储一组元素并支持快速的随机访问。

本实验旨在探究顺序表的基本操作和实现方法。

2. 实验目的•理解顺序表的概念和特性。

•学习顺序表的基本操作,包括插入、删除、查找和修改等。

•掌握顺序表的实现方法,包括静态分配和动态分配两种方式。

•培养对数据结构的抽象思维和编程能力。

3. 实验内容1.了解顺序表的定义,及其与数组的关系。

2.掌握插入操作的实现方法,包括在表头、表中和表尾插入元素。

3.掌握删除操作的实现方法,包括按索引删除和按值删除。

4.掌握查找操作的实现方法,包括按索引查找和按值查找。

5.掌握修改操作的实现方法,包括按索引修改和按值修改。

6.实现顺序表的静态分配和动态分配两种方式。

4. 实验步骤1.定义顺序表的结构体,包括数据存储区和长度属性。

2.实现插入操作,根据需要选择插入位置和移动元素。

3.实现删除操作,根据需要选择删除方式和更新长度。

4.实现查找操作,根据需要选择查找方式和返回结果。

5.实现修改操作,根据需要选择修改方式和更新元素。

6.实现顺序表的静态分配和动态分配方法。

5. 实验结果经过多次实验和测试,顺序表的基本操作都能够正确实现。

在插入操作中,能够将元素正确插入指定位置,并保持顺序表的有序性。

在删除操作中,能够按需删除指定位置或值的元素,并正确更新顺序表的长度。

在查找操作中,能够根据索引或值查找到对应的元素,并返回正确的结果。

在修改操作中,能够按需修改指定位置或值的元素,并更新顺序表的内容。

6. 实验总结本实验通过对顺序表的基本操作和实现方法的学习和实践,进一步巩固了对数据结构的理解和编程能力的培养。

顺序表作为一种常用的数据结构,对于解决实际问题具有重要的作用。

通过本次实验,我对顺序表的插入、删除、查找和修改等操作有了更深入的了解,并学会了如何实现这些操作。

通过本次实验,我还学会了顺序表的静态分配和动态分配方法,了解了它们的区别和适用场景。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验目的及要求:
了解和掌握顺序表的特点;
掌握顺序表基本操作的实现;
要求完成顺序表的初始化、插入、删除、显示操作的实现。

实验设备环境及要求:
PC机一台,内存要求128M以上,VC++6.0集成开发环境。

实验内容与步骤:
1、在VC++6.0环境中新建一个工程和C++文件;
2、实现顺序表初始化、插入、删除算法,代码如下:
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct{
ElemType *elem;
int length;
}SqList;
int InitList_Sq(SqList &L){
L.elem = (ElemType *)malloc(MaxSize*sizeof(ElemType));
if(!L.elem) return 0;
L.length = 0;
return 1;
}
int ListInsert_Sq(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1) return 0;
ElemType *p;
ElemType *q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return 1;
}
int ListDelete_Sq(SqList &L,int i,ElemType &e){
if(i<1||i>L.length) return 0;
ElemType *p=&(L.elem[i-1]);
e=*p;
ElemType *q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return 1;
}
void Disp_Sq(SqList L){
if(L.length==0) printf("此顺序表为空表!\n");
for(int i=0;i<L.length;i++)
printf("%c",L.elem[i]);
printf("\n");
}
void main(){
ElemType e;
SqList L;
InitList_Sq(L);
Disp_Sq(L);
ListInsert_Sq(L,1,'A');
ListInsert_Sq(L,2,'B');
ListInsert_Sq(L,3,'C');
Disp_Sq(L);
ListDelete_Sq(L,1,e);
Disp_Sq(L);
printf("删除的元素是:%c\n",e);
}
实验指导与数据处理:
实验结果:此顺序表为空表!
ABC
BC
删除的元素是:A
分析讨论:
本次实验通过对顺序表基本操作的实现,加深了对顺序表特点的理解,并且熟悉了VC++6.0集成环境,虽然在调试过程中遇到一些问题,但经分析后达到了预期的结果。

相关文档
最新文档