天天看點

線性表的順序存儲方式

線性表的順序存儲方式比較簡單,也很容易了解,不作過多說明,直接上代碼實作,用的是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;
 } 
           

繼續閱讀