//今天看了数据结构中线性表的顺序存储结构部分,写了一个简单的结构
#include<stdio.h>
#define ListMaxSize 50
typedef struct Arr
{
int arr[ListMaxSize];
int cnt; //当前有效元素个数
}SqList;
void InitList(SqList *); //初始化
int Isempty(SqList *); //判断是否为空
int Isfull(SqList *); //判断是否为满
void PrintList(SqList *); //线性表的遍历
int ListInsert(SqList *,int ,int *); //指定位置插入一个元素
int ListDelete(SqList *,int ,int *); //删除指定位置的元素
int Getelem(SqList *,int ,int *); //获取指定位置的元素
int main()
{
int val;
SqList a1;
InitList(&a1);
PrintList(&a1);
ListInsert(&a1,1,1);
ListInsert(&a1,1,2);
ListInsert(&a1,1,3);
PrintList(&a1);
if(ListDelete(&a1,1,&val))
printf("删除的元素为%d\n",val);
else printf("删除失败\n");
PrintList(&a1);
if(Getelem(&a1,1,&val))
printf("GET值为%d\n",val);
else printf("GET元素失败!\n");
return 0;
}
//初始化
void InitList(SqList *pa1)
{
pa1->cnt=0;
return;
}
//判断表是否为空
int Isempty(SqList *pa1)
{
if(pa1->cnt==0)
return 1;
else return 0;
}
///判断表是否为满
int Isfull(SqList *pa1)
{
if(pa1->cnt<ListMaxSize)
return 0;
else return 1;
}
//遍历
void PrintList(SqList *pa1)
{
int i;
if(Isempty(pa1))
printf("表为空!\n");
else
{
for(i=0;i<pa1->cnt;i++)
printf("%d ",pa1->arr[i]);
printf("\n");
}
}
//指定位置插入一个元素
int ListInsert(SqList *pa1,int i,int e)
{
int j;
if(i<1||i>pa1->cnt+1)
return 0;
if(Isfull(pa1))
return 0;
for(j=pa1->cnt;j>=i;j--)
pa1->arr[j]=pa1->arr[j-1];
pa1->arr[j]=e;
pa1->cnt++;
return 1;
}
//删除指定位置的元素,用val传参返回删除元素值
int ListDelete(SqList *pa1,int i,int *pval)
{
int j;
if(i<1||i>pa1->cnt)
return 0;
*pval=pa1->arr[i-1];
for(j=i;j<pa1->cnt;j++)
pa1->arr[j-1]=pa1->arr[j];
pa1->cnt--;
return 1;
}
//GET指定位置元素,用val传参返回
int Getelem(SqList *pa1,int i,int *pval)
{
if(i<1||i>pa1->cnt)
return 0;
else
{
*pval=pa1->arr[i-1];
return 1;
}
}
(C语言)线性表的顺序存储的实现
最新推荐文章于 2022-10-03 21:48:36 发布