線性表的順序存儲方式比較簡單,也很容易了解,不作過多說明,直接上代碼實作,用的是C語言
#include <stdio.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct //定義順序表(線形表的順序存儲結構)
{
ElemType data[MAXSIZE];
int length;
}SqList;
int GetElem(SqList L,int i,ElemType *e) //用e傳回順序表中第i個元素值
{
if(L.length==0||i<1||i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
int ListInsert(SqList *L,int i,ElemType e) //在順序表中第i個元素前插入元素e
{
int k;
if(L->length==MAXSIZE) //順序表已滿
return ERROR;
if(i<1||i>L->length+1) //i不在範圍内
return ERROR;
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--) //如果不是插入到最後一位,那麼将插入位置後元素後移一位
L->data[k+1]=L->data[k];
}
L->data[i-1]=e;
L->length++;
return OK;
}
int ListDelete(SqList *L,int i,ElemType *e) //删除順序表中的第i個元素,用e傳回其值
{
int k;
if(L->length==0) //順序表為空
return ERROR;
if(i<1||i>L->length) //i不在範圍内造成删除位置不正确
return ERROR;
*e=L->data[i-1];
if(i<L->length)
{
for(k=i;i<L->length;k++) //如果不是删除最後一位,将删除位置後繼元素前移
L->data[k-1]=L->data[k];
}
L->length--;
return OK;
}
int main()
{
SqList l; //定義一個順序表l
SqList *p;
p=&l; //定義一個指針p指向順序l
int i,m,n;
int *e; //定義一個整形指針,指向整形變量m
e=&m;
l.length=10;
for(i=0;i<10;i++) //初始化順序表
l.data[i]=i;
n=GetElem(l,5,e); //擷取順序表第5個元素的值
printf("%d %d\n",n,m);
n=ListInsert(p,5,100); //将100插入第5個元素前
printf("%d\n",n);
for(i=0;i<=10;i++)
printf("%d ",p->data[i]);
printf("\n");
n=ListDelete(p,8,e); //删除第8個元素
printf("%d %d\n",n,m);
for(i=0;i<10;i++)
printf("%d ",p->data[i]);
return 0;
}