(C语言)线性表的顺序存储

//今天看了数据结构中线性表的顺序存储结构部分,写了一个简单的结构
#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;
	}
}

猜你喜欢

转载自blog.csdn.net/vipchen1997/article/details/80708153