版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haruno_Sakura/article/details/78445996
实验题1:实现顺序表的各种基本运算的算法
内容:编写一个程序exp2-1.cpp,实现顺序表的各种运算(假设顺序表的元素类型为char),并在此基础上完成如下功能:
(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。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#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
}
void DestroyList(SqList *L) //销毁线性表(DestroyList)
{
free(L);
}
bool ListEmpty(SqList *L) //判断线性表是否为空表;
{
return(L->length==0);
}
int ListLength(SqList *L) //求线性表的长度,直接返回length 的长度即可;
{
return(L->length);
}
void DispList(SqList *L) //输出线性表,依次显示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) //输出顺序表第3个元素,
{
if(i<1||i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e) //该运算顺序查找第一个值域与e 相等的元素的逻辑序号(找到后返回一个大于0的值)若这样的元素不存在,则返回值为0;
{
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--;
for(j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e) //删除数据元素;
{
int j;
if(i<1||i>L->length)
return false;
i--;
e=L->data[i];
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
int 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);
printf(" 7.输出元素a的位置 = %d\n",LocateElem(L,'a'));
printf(" 8.在第4个元素位置上插入f元素\n");
ListInsert(L,4,'f');
printf(" 9.输出顺序表L: ");
DispList(L);
printf(" 10.删除L的第3个元素\n");
ListDelete(L,3,e);
printf(" 11.输出顺序表L: ");
DispList(L);
printf(" 12.释放顺序表L\n");
DestroyList(L);
return 0;
}