1. 程式人生 > 其它 >順序表——順序儲存結構

順序表——順序儲存結構

#include<stdio.h>
#include<stdbool.h>
#define MaxSize 20
typedef int DataType;
typedef struct
{
DataType data[MaxSize];
int length;

}SqList;

void Init_List(SqList * L, int DataType[], int n); // 順序表初始化
bool Insert_List(SqList * L, int pos, int x); // 順序表插入
bool Delete_List(SqList * L, int pos, int * x); // 順序表刪除
bool Empty_List(SqList * L); // 判空
bool Full_List(SqList * L); // 判滿
int Locate_List(SqList * L, int x); // 按值查詢
bool Get_List(SqList * L, int pos, int * x); // 按位查詢
int Length_List(SqList *L); // 順序表長度
void Traverse_List(SqList * L); // 遍歷線性表

int main()
{
SqList L;
int x,val;
int a[8] = {12,32,43,55,34,76,81,59}; // 定義陣列

Init_List(&L, a, 8);
printf("\n遍歷順序表:");
Traverse_List(&L);
printf("\n線性表長度:%d\n",Length_List(&L));

if(Insert_List(&L, 1, 80))
{
printf("\n插入成功!\n");
printf("插入的元素:80\n") ;
printf("位置:第1個位置\n");
}
else
printf("\n插入失敗!\n");
printf("遍歷順序表:");
Traverse_List(&L);

Delete_List(&L, 2, &val);
printf("\n刪除的元素:%d\n",val);
printf("位置:第2個位置\n");
printf("遍歷順序表:");
Traverse_List(&L);

if(Locate_List(&L, 55))
{
printf("\n按值查詢成功!\n");
printf("查詢的元素是:55\n");
printf("位置:第%d個位置\n",Locate_List(&L, 55));
}
else
printf("\n按值查詢失敗\n");

if(Get_List(&L, 2, &x))
{
printf("\n按位查詢成功\n");
printf("位置:第2個位置\n");
}
else
printf("\n按位查詢失敗!\n");
printf("您查詢的元素為:%d\n",x);

printf("\n遍歷順序表:");
Traverse_List(&L);

return 0;
}

void Init_List(SqList * L, int DataType[], int n)
{
int i;
if(n>MaxSize)
printf("儲存空間不足!\n");

for(i=0; i<n; ++i){
L->data[i] = DataType[i];
}
L->length = n;

return;
}

bool Insert_List(SqList * L, int pos, int x)
{
int i;

if(Full_List(L))
return false;

if(pos<1||pos>L->length+1)
return false;

for(i=L->length; i>=pos; i--)
L->data[i] = L->data[i-1];

L->data[pos-1] = x;
L->length++;

return true;
}

bool Delete_List(SqList * L, int pos, int * val)
{
int i;

if(Empty_List(L))
return false;

*val = L->data[pos-1];
for(i=pos; i<L->length; ++i)
L->data[i-1] = L->data[i];

L->length--;
return true;
}

bool Empty_List(SqList * L)
{
if(L->length==0)
return true;
else
return false;
}

bool Full_List(SqList * L)
{
if(L->length==MaxSize)
return true;
else
return false;
}

int Locate_List(SqList * L, int x)
{
int i;

for(i=0; i<L->length; ++i)
{
if(x==L->data[i])
return i+1;
}

return 0;
}

bool Get_List(SqList * L, int pos, int * x)
{
int i;

if(pos<1||pos>L->length)
return false;

*x = L->data[pos-1];

return true;
}

int Length_List(SqList *L)
{
return L->length;
}

void Traverse_List(SqList * L)
{
int i;

for(i = 0; i<L->length; ++i)
printf("%3d", L->data[i]);

printf("\n");

return;
}