Initialize, determine whether it is empty, insert an element at the i-th position, delete the i-th element, find the length, return the position of an element, find the i-th element, and output the linear table
Code area
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct //顺序表的类型定义
{
ElemType *Elem;
int length;
}SqList;
enum Status{ERROR,OK};
//构造一个空的顺序表
Status InitList_Sq(SqList &L)
{
L.Elem=(ElemType *)malloc(sizeof(ElemType)); //为顺序表分配空间
if(!L.Elem)
return ERROR; //存储分配失败
L.length=0; //空表长度为0
return OK;
}
//判断是否为空表
Status ListEmpty(SqList L)
{
if(L.length==0)
return OK;
return ERROR;
}
//在第i个位置插入e
Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
if(i<0||i>L.length+1) //格外注意:插入即后移
{
return ERROR; //位置不合理
}
for(int j=L.length-1;j>=i-1;j--)
{
L.Elem[j+1]=L.Elem[j];
}
L.Elem[i-1]=e; //注意:因为是位置,不是下标
L.length++;
return OK;
}
//删除第i个元素
Status ListDelete_Sq(SqList &L,int i)
{
if(i<0||i>L.length+1)
return ERROR;
for(int j=i-1;j<L.length-1;j++)
{
L.Elem[j]=L.Elem[j+1];
}
L.length--;
return OK;
}
//返回线性表长度
int ListLength(SqList L)
{
return L.length;
}
//返回第一个与e满足关系的位置
Status LocateElem(SqList L,ElemType e,int *z)
{
int i,flag=0;
if(L.length==0)
return ERROR;
for(i=0;i<L.length;i++)
{
if(L.Elem[i]==e)
{
flag=1;
break;
}
}
if(flag)
{
*z=i+1;
printf("位置为:%d\n",i+1);
else
printf("没有这个元素\n");
return OK;
}
//找到第i个元素
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0||i<0||i>L.length+1)
{
return ERROR;
}
else
*e=L.Elem[i-1];
return OK;
}
//输出线性表的元素
Status Print(SqList L)
{
int i;
printf("现在的顺序表为:\n");
if(L.length)
{
for(i=0;i<L.length;i++)
{
printf("%d",L.Elem[i]);
}
printf("\n");
}
else if(L.length==0)
printf("顺序表被清除\n");
else
printf("线性表被销毁\n");
return OK;
}
int main()
{
SqList L;
ElemType e;
int i,z;
if(InitList_Sq(L)) //初始化
{
printf("构建顺序线性表成功\n");
}
printf("输入顺序表长度\n");
scanf("%d",&L.length);
printf("input what you want to enter\n"); //输入数据
for(i=0;i<L.length;i++)
{
scanf("%d",&L.Elem[i]); //注意加&
}
printf("在第i个位置插入数据e,现在输入e和位置\n");
scanf("%d %d",&e,&i);
ListInsert_Sq(L,i,e);
Print(L);
printf("顺序表目前的长度为:%d\n",ListLength(L));
printf("删除第i个数据,现在输入位置\n");
scanf("%d",&i);
ListDelete_Sq(L,i);
Print(L);
printf("输入i,顺序表中第i个元素为:\n");
scanf("%d",&i);
GetElem(L,i,&e);
printf("%d\n",e);
printf("输入一个数据e,在顺序表中寻找第一个与e满足关系的位置\n");
scanf("%d",&e);
LocateElem(L,e,&z); //注意格式
return 0;
}