顺序表——顺序存储结构

 

#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;
}

顺序表——顺序存储结构

 

上一篇:线性表之顺序表


下一篇:linuxC多进程通讯---无名管道dup