李春葆 上机实验题2——实验题1:实现顺序表的各种基本运算

一、实验内容: 

实验题1:实现顺序表的各种基本运算的算法
(1)初始化顺序表L。
(2)依次插入a、b、c、d、e元素。 
(3)输出顺序表L。
(4)输出顺序表L的长度。
(5)判断顺序表L是否为空。
(6)输出顺序表L的第3个元素。 
(7)输出元素a的位置。
(8)在第4个元素的位置上插入f元素。
(9)输出顺序表L。
(10)删除顺序表L的第3个元素。
(11)输出顺序表L。
(12)释放顺序表L。

 

二、实验目的

这个实验的各步骤的目的如下:

(1)初始化顺序表L:这个步骤是为了建立一个空的顺序表,为后续的插入和删除操作做准备。

(2)依次插入a、b、c、d、e元素:这个步骤是为了在顺序表中依次插入五个元素,并观察和理解顺序表的变化。

(3)输出顺序表L:这个步骤是为了打印出顺序表中的所有元素,以验证插入操作的正确性。

(4)输出顺序表L的长度:这个步骤是为了计算和展示顺序表的长度,这是顺序表的一个重要属性。

(5)判断顺序表L是否为空:这个步骤是为了检查顺序表是否为空,这是进行任何操作前都需要检查的。

(6)输出顺序表L的第3个元素:这个步骤是为了获取并打印出顺序表中的第三个元素,以展示如何访问顺序表中的特定位置。

(7)输出元素a的位置:这个步骤是为了找出并打印出元素a在顺序表中的位置,以展示如何查找元素的位置。

(8)在第4个元素的位置上插入f元素:这个步骤是为了在顺序表的特定位置插入一个新的元素,并观察对顺序表的影响。

(9)输出顺序表L:这个步骤是为了打印出修改后的顺序表,以验证插入操作的正确性。

(10)删除顺序表L的第3个元素:这个步骤是为了删除顺序表中的第三个元素,并观察对顺序表的影响。

(11)输出顺序表L:这个步骤是为了打印出修改后的顺序表,以验证删除操作的正确性。

(12)释放顺序表L:这个步骤是为了释放顺序表所占用的内存空间,以防止内存泄漏。

 

三、实验步骤:

(1)初始化顺序表L。

#define MAXSIZE 100 //定义线性表的最大长度

typedef int ElemType; //定义线性表的数据类型

typedef struct

{

ElemType elem[MAXSIZE]; //存储空间

int length; //当前长度

} SeqList; //顺序表的类型定义

int InitList(SeqList *L) //初始化顺序表L

{

L->length=0; //初始长度为0

return OK;

}


(2)依次插入a、b、c、d、e元素。

int ListInsert(SeqList *L,int i,ElemType e) //在顺序表L的第i个位置插入元素e
{ int j;
  if(i<1 || i>L->length+1) //判断i的范围是否有效
    return ERROR;
  if(L->length==MAXSIZE) //判断存储空间是否已满
    return ERROR;
  for(j=L->length;j>=i;j--) //将第i个位置及之后的元素后移
    L->elem[j]=L->elem[j-1];
  L->elem[i-1]=e; //在位置i处插入元素e
  L->length++; //表长加1
  return OK;
}
int main()
{ SeqList L; //定义顺序表L
  int i;
  ElemType e;
  InitList(&L); //初始化顺序表L
  ListInsert(&L,1,'a'); //在顺序表L的第1个位置插入元素a
  ListInsert(&L,2,'b'); //在顺序表L的第2个位置插入元素b
  ListInsert(&L,3,'c'); //在顺序表L的第3个位置插入元素c
  ListInsert(&L,4,'d'); //在顺序表L的第4个位置插入元素d
  ListInsert(&L,5,'e'); //在顺序表L的第5个位置插入元素e
  return 0;
}


(3)输出顺序表L。

void PrintList(SeqList L) //输出顺序表L

{

int i;

for(i=0;i<L.length;i++)

printf("%c ",L.elem[i]);

printf("\n");

}


(4)输出顺序表L的长度。

int ListLength(SeqList L) //求顺序表L的长度

{

return L.length;

}


(5)判断顺序表L是否为空。

int ListEmpty(SeqList L) //判断顺序表L是否为空

{

if(L.length==0)

return TRUE;

else return FALSE;

}


(6)输出顺序表L的第3个元素。

int GetElem(SeqList L,int i,ElemType *e) //取出顺序表L的第i个元素

{

if(i<1 || i>L.length) //判断i的范围是否有效

return ERROR;

*e=L.elem[i-1]; //取出第i个元素

return OK;

}


(7)输出元素a的位置。

int LocateElem(SeqList L,ElemType e) //查找顺序表L中元素e的位置

{

int i;

for(i=0;i<L.length;i++)

if(L.elem[i]==e) return i+1; //返回元素e在顺序表L中的位置

return 0; //未找到元素e

}


(8)在第4个元素的位置上插入f元素。

int ListInsert(SeqList *L,int i,ElemType e) //在顺序表L的第i个位置插入元素e

{

int j;

if(i<1 || i>L->length+1) //判断i的范围是否有效

return ERROR;

if(L->length==MAXSIZE) //判断存储空间是否已满

return ERROR;

for(j=L->length;j>=i;j--) //将第i个位置及之后的元素后移

L->

elem[j]=L->

elem[j-1]; L->

elem[i-1]=e; //在位置i处插入元素e

L->

length++; //表长加1 return OK; }


(9)输出顺序表L。

PrintList(L); //输出顺序表L


(10)删除顺序表L的第3个元素。

int ListDelete(SeqList *L,int i,ElemType *e) //删除顺序表L的第i个元素,并用e返回其值

{

int j;

if(i<1 || i>L->length) //判断i的范围是否有效

return ERROR;

*e=L->

elem[i-1]; //取出第i个元素的值

for(j=i;j<L->length;j++) //将第i个位置之后的元素前移

L->

elem[j-1]=L->

elem[j];

L->

length--; //表长减1

return OK;

}


(11)输出顺序表L。

PrintList(L); //输出顺序表L


(12)释放顺序表L。

void DestroyList(SeqList *L) //销毁顺序表L

{

L->

length=0; //将顺序表L的长度置为0

}

 

四、代码实现:

#include
#include
#define MaxSize 50

typedef struct{
	char data[MaxSize];
	int length;
}SqList;

//1初始化顺序表
void InitList(SqList *&L){
	L=(SqList *)malloc(sizeof(SqList));
	L->length=0;
}

//2向顺序表中依次插入元素
void CreateList(SqList *&L,char a[],int n){
	int i=0,k=0;
	L=(SqList *)malloc(sizeof(SqList));
	while(idata[k]=a[i];
		k++;i++;
	}
	L->length=k;

}

//3、9、11输出顺序表L
void DispList(SqList *L){
	for(int i=0;ilength;i++){
		printf("%c \t",L->data[i]);
	}
	printf("\n");
}

//4输出顺序表的长度
int ListLength(SqList *L){
	return(L->length);
}

//5判断表空
bool ListEmpty(SqList *L){
	return(L->length==0);
}

//6输出顺序表的第三个元素
bool GetElem(SqList *L,int i,char &e){
	if(i<1||i>L->length) return false;
	e=L->data[i-1];
	return true;
}

//7输出元素a的位置
int LocateElem(SqList *L,char e){
	int i=0;
	while(ilength && L->data[i]!=e)
		i++;
	if(i>L->length)
		return 0;
	else
		return i+1;
}

//8在第四个元素位置上插入元素f
bool ListInsert(SqList *&L,int i,char e){
	int j;
	if(i<1||i>L->length||L->length==MaxSize)
		return false;
	i--;
	for(j=L->length;j>i;j--)
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;
	return true;
}

//10删除顺序表L的第三个元素
bool ListDelete(SqList *&L,int i,char &e){
	int j;
	if(i<1||i>L->length)
		return false;
	i--;//使顺序表的物理序号与逻辑序号相一致
	e=L->data[i];
	for(j=i;jlength-1;j++)	//依次向前移动元素
		L->data[j]=L->data[j+1];
	L->length--;
	return true;
}

//12销毁顺序表
void DestroyList(SqList *&L){
	free(L);
}

int main(){
	SqList *L;
	//1初始化顺序表L
	printf(" 1初始化顺序表L\n");
	InitList(L);
	//2依次插入元素a,b,c,d,e元素(可以理解为用字符数组创建顺序串)
	printf("\n 2依次插入元素a,b,c,d,e元素(可以理解为用字符数组创建顺序串)\n");
	char a[5]={'a','b','c','d','e'};
	CreateList(L,a,5);
	//3输出顺序表L
	printf("\n 3输出顺序表L:");
	DispList(L);
	//4输出顺序表L的长度
	printf("\n 4输出顺序表L的长度:");
	ListLength(L);
	printf("长度为:%d \n",ListLength(L));
	//5判断L是否为空
	printf("\n 5判断L是否为空:");
	ListEmpty(L);
	if(ListEmpty(L))
		printf("表为空\n");
	else
		printf("表非空\n");
	//6输出顺序表L的第三个元素
	printf("\n 6输出顺序表L的第三个元素:");
	char e;
	GetElem(L,3,e);
	printf("顺序表L的第三个元素为:%c \n",e);
	//7输出元素a的位置
	printf("\n 7输出元素a的位置:");
	LocateElem(L,'a');
	printf("%d\n",LocateElem(L,'a'));
	//8在第四个元素的位置上插入元素f
	printf("\n 8在第四个元素的位置上插入元素f\n");
	ListInsert(L,4,'f');
	//9输出顺序表L
	printf("\n 9输出顺序表L:");
	DispList(L);
	//10删除顺序表第三个元素
	printf("\n 10删除顺序表第三个元素:");
	ListDelete(L,3,e);
	printf("%c 被删除\n",e);
	//11输出顺序表!
	printf("\n 11输出顺序表L:");
	DispList(L);
	//12释放顺序表
	printf("\n 12释放顺序表");
	DestroyList(L);
	return(0);
}

 

五、运行结果:

李春葆 上机实验题2——实验题1:实现顺序表的各种基本运算_第1张图片

 

你可能感兴趣的:(数据结构,数据结构,算法)