顺序存储结构的表示
在C语言中,一维数组的元素也存放于一片连续的存储空间中,故借助于C语言中的一维数组类型来描述线性表的顺序存储结构,即:
#include
#include
#define MAX 10 //顺序表最大的长度
#define datatype int
typedef struct
{
datatype data[MAX]; //顺序表的存储空间
int last; //当前顺序表最后个一个元素的下标
}sqlist,*sqlink; //顺序表说明符
void Clearlist(sqlink L)
{
L->last=-1; //用last来表示最后一个元素的下标,若last的值为-1,则表明顺序表里没值}
void Great_list(sqlink L)
{
int i;
for(i=0;i { L->data[i]=i; //给每一个元素赋初值 L->last++; //记录相应的下标 } } void Insert(sqlink L,int X,int n ) { int i; if(L->last>=MAX-1) //检查最后一个元素是否在范围内,不能大于顺序表的最大值{ printf("Overflow\n"); } else if(n>L->last+1||n<1) //检查插入的数要在顺序表的范围内 { printf("Position error\n"); } else { for(i=L->last;i>=n;i--) L->data[i+1]=L->data[i]; //顺序表元素右移,直到i=n L->data[i+1]=X; //把该数插入到第n个里 L->last++; //把最后一个元素的下标加1 } } void Delete(sqlink L,int i) { int j; if(i<=1||i>L->last) //检查被删除的数是否在该顺序表之中printf("Position error\n"); for(j=i;j<=L->last-1;j++) //L->last-1是把它转化成数组下标L->data[j-1]=L->data[j]; //data[j-1]是第j个数所对应在数组里的。 L->last--; } int main(void) { sqlink La; La=(sqlink)malloc(sizeof(sqlist)); Clearlist(La); Great_list(La); int i; for(i=0;i { printf("%d ",La->data[i]); } printf("\n"); Insert(La,20,4); int n; for(n=0;n printf("%d ",La->data[n]); printf("%d\n",La->last); printf("\n"); Delete(La,5); int m; for(m=0;m printf("%d ",La->data[m]); printf("\n"); free(La); return 0; }