实验题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);
}