線性表順序存儲相關操作

線性表的順序存儲結構,指的是用一段地址連續的存儲單元依次存儲線性表的數據元素。

下面給出關於線性表順序存儲常用操作的代碼:

#include <stdio.h>
#define MAXSIZE 20    //存儲空間初始分配量
#define true 1
#define false 0
typedef int ElemType;

typedef struct
{
	ElemType data[MAXSIZE];  //數組存儲數據元素,最大值爲MAXSIZE
	int length;              //線性表當前長度
}SqList; 

void InitList(SqList *L)    //初始化順序表
{
	int i;
	for(i = 0;i<MAXSIZE;i++)
		L->data[i] = 0;
	L->length = 0;
}

int ListEmpty(SqList L)    //判斷表是否爲空
{
	if(L.length == 0)
		return true;
	return false;
}

void ClearList(SqList *L)   //將線性表清空
{
	int i;
	for(i = 0;i < L->length;i++)
		L->data[i] = 0;
	L->length = 0;
}

void GetElem(SqList L,int i,ElemType *e)    //將線性表L中第i個元素值返回給e
{
	*e = L.data[i];
}

int LocateElem(SqList L,ElemType e)    //在線性表中查找與e相等的值,成功返回值的下標,沒找到返回false
{
	int i;
	for(i = 0;i < L.length;i++)
	{
		if(L.data[i] == e)
			return i;
	}
	
	return false;
}

int ListInsert(SqList *L,int i,ElemType e)   //在線性表 i 處插入元素e
{
	if( L->length == MAXSIZE)
	{
		printf("內存已滿,無法插入\n");
		return 0;
	}
	
	else if(i > L->length || i < 0)
	{
		printf("下標不在數組範圍內\n");
		return false;
	}
	
	int t;
	for(t = L->length-1;t >= i;t--)
		L->data[t + 1] = L->data[t];
	L->data[i] = e;
	L->length++;
}

int ListDelete(SqList *L,int i,ElemType *e)    //刪除線性表L中第i個元素,並用e返回其值
{
	if(ListEmpty(*L))
	{
		printf("此線性表爲空,不能刪除\n");
		return false;
	}
	
	else if(i > L->length || i < 0)
	{
		printf("下標不在數組範圍內\n");
		return false;
	}
	*e = L->data[i];
	int t;
	for(t = i;t < L->length;t++)
		L->data[i] = L->data[i + 1];
	L->length--;
}

int ListLength(SqList L)    //返回線性表的長度
{
	return L.length;
}

void print(SqList L)   //打印線性表
{
	int i;
	for(i = 0;i <L.length;i++)
	    printf("%d ",L.data[i]);
	printf("\n");
}

int main()  //測試程序
{
    SqList L;
	InitList(&L);
	int i;
	for(i = 0;i <10;i++)
		ListInsert(&L,i,i);
	print(L);
	ElemType e;
	ListDelete(&L,2,&e);
	print(L);
	printf("%d\n",e);
    return 0;
}

線性表線性存儲結構的優缺點:

優點:無須爲表示表中元素中間的邏輯關係而增加額外的存儲空間

            可以快速的存取biao表中任意位置的元素

缺點:插入和刪除操作需要移動大量元素

            當線性表長度變化較大時,難以確定存儲空間的容量

            造成存儲空間的“碎片”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章