数据结构与算法之顺序表
顺序表
#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char Elemtype;
typedef struct list
{
char date[MaxSize];
int length;
}Sqlist;
void Createlist(Sqlist *&L,Elemtype a[],int n) //建立顺序表
{
int i;
L=(Sqlist *)malloc(sizeof(Sqlist));
for(i=n-1;i>=0;i--)
L->date[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) //判空
{
if(L->length!=0)
return true;
else
return false;
}
/*******************************************
********************************************/
int Listlength(Sqlist *L) //输出长度
{
printf("%d\n",L->length);
}
/*******************************************
********************************************/
void Displist(Sqlist *L) //输出顺序表
{
int i;
for(i=0;i<L->length;i++)
printf("%c \n",L->date[i]);
}
/*******************************************
********************************************/
void GetElem(Sqlist *L,int j) //求顺序表中的某个下标的元素值
{
int i;
for(i=0;i<L->length;i++)
{
if(i==j-1)
printf("%c\n",L->date[i]);
}
}
/*******************************************
********************************************/
int LocateElem(Sqlist * L,Elemtype e)//按元素值查找
{
int i=0;
while(i<L->length && L->date[i]!=e)
i++;
if(i>=L->length)
{
return 0;
}
else
{
printf("%d\n",i+1);
}
}
/*******************************************
********************************************/
bool listinsert(Sqlist *&l,int j,Elemtype e) //插入元素
{
int i;
if(j<1 || j>l->length+1 || l->length==MaxSize)
return false;
j--;
for(i=l->length;i>j;i--)
l->date[i]=l->date[i-1];
l->date[j]=e;
l->length++;
return true;
}
/*******************************************
********************************************/
bool Deletelement(Sqlist *&l,int j,Elemtype &e) //删除数据元素
{
int i;
if(j<1 || j>l->length+1)
return false;
j--;
e=l->date[j];
for(i=j;i<l->length-1;i++)
l->date[i]=l->date[i+1];
l->length--;
return true;
}
/*******************************************
********************************************/
int main()
{
Sqlist *L;
Elemtype a[5]={'a','b','c','d','e'};
Elemtype e=0;
Initlist(L); //初始化顺序表L
printf("初始化完成\n");
/*******************************************
********************************************/
Createlist(L,a,5); //依次插入a,b,c,d,e
printf("插入元素后输出的顺序表为:\n");
/*******************************************
********************************************/
Displist(L); //输出顺序表L
/*******************************************
********************************************/
printf("此顺序表长度为:");
printf("%d\n",Listlength(L)); //输出顺序表L长度
/*******************************************
********************************************/
if(ListEmpty(L)==1) //判断顺序表L是否为空
printf("不为空\n");
else
printf("为空\n");
/*******************************************
********************************************/
printf("顺序表的第3个元素为:"); //输出顺序表的第3个元素
GetElem(L,3);
/*******************************************
********************************************/
printf("元素a的位置为:"); //查找a的位置
LocateElem(L,'a');
/*******************************************
********************************************/
listinsert(L,4,'f'); //在第4个元素位置上插入元素f
printf("插入元素后的顺序表为:\n");
/*******************************************
********************************************/
Displist(L); //输出顺序表L
/*******************************************
********************************************/
Deletelement(L,3,e); //删除L的第3个元素
/*******************************************
********************************************/
printf("删除元素后的顺序表为:\n");
Displist(L); //输出顺序表L
/*******************************************
********************************************/
Destroylist(L); //释放顺序表L
printf("释放顺序表");
return 0;
}