领会顺序表存储结构并掌握顺序表中的各种基本运算算法设计

实验目的:领会顺序表存储结构并掌握顺序表中的各种基本运算算法设计

实验内容:编写一个程序sqlist.cpp,实现顺序表中的各种基本运算和整体建表算法(假设顺序表元素类型ElemType为char),并在此基础上设计一个程序exp1.cpp,并完成如下功能。
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
希望对大家有帮助
代码如下,
sqlist.cpp`

//顺序表基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType; 
typedef struct 
{
    
    	ElemType data[MaxSize];		//存放顺序表元素
   	int length;					//存放顺序表的长度
} SqList;						//顺序表的类型
void CreateList(SqList *&L,ElemType a[],int n)
//建立顺序表
{
    
    
	L=(SqList *)malloc(sizeof(SqList));
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}
void InitList(SqList *&L)
{
    
    
	L=(SqList *)malloc(sizeof(SqList));	//分配存放线性表的空间
	L->length=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)
{
    
    
	for (int 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;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L, ElemType e)
{
    
    
	int i=0;
	while (i<L->length && L->data[i]!=e) i++;
	if (i>=L->length)
		return 0;
	else
		return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
    
    
	int j;
	if (i<1 || i>L->length+1)
		return false;
	i--;						//将顺序表位序转化为elem下标
	for (j=L->length;j>i;j--) 	//将data[i]及后面元素后移一个位置
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;				//顺序表长度增1
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
    
    
	int j;
	if (i<1 || i>L->length)
		return false;
	i--;						//将顺序表位序转化为elem下标
	e=L->data[i];
	for (j=i;j<L->length-1;j++)	//将data[i]之后的元素前移一个位置
		L->data[j]=L->data[j+1];
	L->length--;				//顺序表长度减1
	return true;
}

exp1.cpp

#include "sqlist.cpp"
 main()
{
    
    
SqList *L;
ElemType e;
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\n");
DispList(L); //输出顺序表
printf("《4》输出顺序表L长度为: %d\n", ListLength(L));
printf("《5》顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L,3,e);
printf("《6》输出顺序表L的第三个元素为: %c\n",e);
printf("《7》元素a的位置是; %d\n",LocateElem(L,'a'));
printf("《8》在第四个位置插入f\n");
ListInsert(L,4,'f');
printf("《9》输出顺序表L\n");
DispList(L); 
ListDelete(L,3,e);//e是返回的值
printf("《10》删除顺序表L的第三个元素为: %c\n",e);//e是L里面第三个元素返回的值
printf("《11》输出顺序表L\n");
DispList(L);
printf("《12》释放顺序表L\n");
DestroyList(L); 
}

猜你喜欢

转载自blog.csdn.net/xx7755223/article/details/108836381