线性结构特点:在数据元素非空有限集合中,(1)存在唯一的一个被称为“第一个”的数据元素;(2)存在唯一的一个被称为“最后一个”的数据元素;(3)除了第一个之外,集合中每个数据元素均只有一个前驱;(4)除了最后一个之外,集合中每个数据元素均只有一个后继;
线性表的顺序表示和实现:
#include<stdio.h>
#include<malloc.h>
#define longth 100
#define increace 10
typedef struct{
int *elem;
int length;
int listsize;
}SqList;
int InitList(SqList &L)
{//建立顺序表
L.elem=(int *)malloc(longth*sizeof(int));
if(!L.elem)
exit(0);
L.length=0;
L.listsize=longth;
return 1;
}
int ListInsert(SqList &L,int i,int e)
{//插入数据
if(i<1||i>L.length+1)return 1;
if(L.length>=L.listsize)
{
int *newbase=(int *)realloc(L.elem,(L.listsize+increace)*sizeof(int));
if(!newbase)exit(5);
L.elem=newbase;
L.listsize+=increace;
}
int *q=&(L.elem[i-1]);
for(int *p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return 2;
}
int ListDelete_Sq(SqList &L ,int i)
{
int e;
if((i<1)||(i>L.length))
return errno;
int * p=&(L.elem[i-1]);
e=*p;
int * q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return e;
}
void show(SqList &l)
{
for(int p=0;p<l.length;++p)
printf("%d ",l.elem[p]);
}
int main()
{
int temp,element;
SqList a;
InitList(a);
printf("输入五个数:\n");
for(int i=1;i<=5;++i)
{
int t;
scanf("%d",&t);
ListInsert(a,i,t);
}
printf("你输入了:\n");
show(a);
printf("\n输入你要删除的位置:");
scanf("%d",&temp);
element=ListDelete_Sq(a,temp);
printf("你删除了%d\n",element);
show(a);
getchar();
}