线性表的顺序存储结构是指用一段地址连续的存储单元存储数据
/*
*顺序存储结构可以用数组
*/
#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;
}