#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
#define ElemType int
typedef struct
{
ElemType data[MaxSize]; //存放线性表中的元素
int length; //存放线性表的长度
}SqList; //顺序表类型
void CreateList(SqList * &L, ElemType a[], int n) //由a中的n个元素建立顺序表
{
int i = 0, k = 0; //k表示L中的元素个数,初始值为0
L = (SqList * )malloc(sizeof(SqList)); //分配存放线性表的空间
while(i < n)
{
L -> data[k] = a[i];
k++;
i++;
}
L -> length = k; //设置L的长度
}
void InitList(SqList * &L) //初始化线性表
{
L = (SqList * )malloc(sizeof(SqList));
L -> length = 0; //置空线性表的长度为0
}
void DestoryList(SqList * & L) //销毁线性表
{
free(L); //释放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("%d ",L -> data[i]);
printf("\n");
}
bool GetElem(SqList * L, int i, ElemType &e) //求线性表中某个数据元素值 将第i个元素赋值给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; //未找到返回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--) //将data[i]及后面的元素后移一个位置
L -> data[j] = L -> data[j-1];
L -> data[i] = e; //插入元素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--;
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()
{
int n = 10;
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = a;
InitList((SqList * &)p); //初始化线性表
CreateList((SqList * &)p,a,n); //创建线性表
DispList((SqList *)p); //输出线性表
bool listempty = ListEmpty((SqList *)p); //判断是否是空表,0代表不是空表,1代表是空表
printf("%d\n",listempty);
int listlength = ListLength((SqList *)p); //返回线性表的长度
printf("%d\n",listlength);
int elem; //求线性表中某个元素值
GetElem((SqList *)p,5,elem);
printf("%d\n",elem);
int e = 6,locate; //按元素查找其逻辑序号
locate = LocateElem((SqList *)p,e);
printf("%d\n",locate);
ListInsert((SqList * &)p,5,20); //插入数据元素
DispList((SqList *)p);
int deleteelem; //删除线性表中的元素
ListDelete((SqList * &)p,5,deleteelem);
printf("%d\n",deleteelem);
DestoryList((SqList * &)p); //销毁线性表
return 0;
}
数据结构——线性表 C语言
猜你喜欢
转载自blog.csdn.net/qq_41286145/article/details/82811983
今日推荐
周排行