线性表-顺序表

线性表的顺序存储结构是指用一段地址连续的存储单元存储数据

/*
*顺序存储结构可以用数组
*/
#include<stdio.h>
#define MAXSIZE 20 //存储空间初始分配量
//结点
typedef struct
{
	int data[MAXSIZE];//数组,存储数据元素(数据域)
	int length;//线性表当前长度
}Sqlist;

/*初始化顺序表*/
void init_list(Sqlist *L)
{
	L->length = 0;
}
/*判断顺序表是否为空*/
int list_empty(Sqlist*L)
{
	if(L->length==0)
		return 0;
	else
		return 1;
}
/*顺序表的清空*/
void list_clear(Sqlist*L)
{
	L->length=0;
}
//头插法
void list_insert(Sqlist*L,int i,int e)
{
	if(L->length==MAXSIZE)//如果顺序表已满
		return;
	if(i<1||i>L->length+1)
		return;
	if(i<=L->length)//如果插入的元素不在表尾
	{
		for(int k=MAXSIZE-1;k>i-1;k--)
		{
			L->data[k]=L->data[k-1];
		}
	}
	L->data[i-1]=e;
	L->length++;
}
int get_elem(Sqlist*L,int i)
{
	int e;
	e=L->data[i-1];
	return e;
}
void list_delete(Sqlist*L,int i)
{
	if(L->length==0)
		return;
	if(i<1||i>L->length)
		return;
	if(i<L->length)
	{
		for(int k=i;k<L->length;k++)
		{
			L->data[k-1]=L->data[k];
		}
	}
	L->length--;
}
void list_show(Sqlist*L)
{
	printf("顺序表的元素:");
	for(int i=0;i<L->length;i++)
		printf("%2d",L->data[i]);
}
int main()
{
	int i;
	Sqlist L;//创建一个顺序表
	init_list(&L);
	printf("初始化后的线性表长度length:%d\n",L.length);
	//插入1-5
	printf("插入1-5:\n");
	for(int j=1;j<=5;j++)
	{
		list_insert(&L,1,j);
	}
	
	//判断顺序表是否为空
	printf("判断顺序表是否为空(空为0,反之为1):");
	i=list_empty(&L);
	printf("%d\n",i);
	
	//获取顺序表中的第i个元素
	i = get_elem(&L,4);
	printf("输出第i个元素:%d\n",i);
	//删除顺序表中的第j个元素
	list_delete(&L,2);
	//输出元素
	list_show(&L);
	//清空顺序表
	list_clear(&L);
	return 0;
}
posted @ 2021-11-22 22:06  君有云  阅读(95)  评论(0)    收藏  举报