Sequence_List 顺序表的实现及各种操作

来源:互联网 发布:nginx rewrite 编辑:程序博客网 时间:2024/05/21 15:53
#include<stdio.h>
#define MAXSIZE 100
typedef int Datatype;
typedef struct {//顺序表的结构体
Datatype a[MAXSIZE];
int size;
}sequence_list;


void init(sequence_list *slt)//顺序表初始化
{
slt->size = 0;
}


void append(sequence_list *slt, Datatype x)//在顺序表后部进行插入操作
{
if (slt->size == MAXSIZE)
{
printf("顺序表是满的,不能进行插入!\n");
exit(1);
}
slt->a[slt->size] = x;
slt->size+=1;
}


void display(sequence_list slt)//打印顺序表各结点的值
{
int i;
if (!slt.size)
printf("顺序表是空的\n");
else
{
for (i = 0; i < slt.size; i++)
printf("%5d", slt.a[i]);
printf("\n");
}
}


int empty(sequence_list slt)//判断顺序表是否为空
{
return slt.size?0:1;
}


int find(sequence_list slt, Datatype x)//查找顺序表中值为x的节点的位置
{
if (empty(slt))
{
printf("顺序表为空,不能进行查找!\n");
exit(1);
}
int i;
for (i = 0; i < slt.size; i++)
{
if (slt.a[i] == x)
return i;
}
return -1;
}


Datatype get(sequence_list slt, int i)//输出顺序表中第i个结点的值
{
if (i >= slt.size||i<0)
{
printf("没有第%d个结点!\n", i);
exit(1);
}
printf("下标为%d的结点是%d\n", i, slt.a[i]);
}


void insert(sequence_list *slt, int i, Datatype x)//顺序表的插入操作
{
if (i >= slt->size || i<0)
{
printf("没有第%d个结点,不能插入!\n", i);
exit(1);
}
if(slt->size==MAXSIZE)
{
printf("顺序表已满,不能插入!\n");
exit(1);
}
int j = slt->size + 1;
for (; j > i; j--)
slt->a[j] = slt->a[j - 1];
slt->a[i] = x;
slt->size += 1;
}


void dele(sequence_list *slt,int i)//删除操作
{
if (i >= slt->size || i<0)
{
printf("没有第%d个结点,不能删除!\n", i);
exit(1);
}
int j = i;
for (; j < slt->size-1; j++)
slt->a[j] = slt->a[j + 1];
slt->size -= 1;
}


void main()
{
sequence_list S;
init(&S);
printf("空为1,非空为0:%d\n", empty(S));
int i = 0;
for (; i < 7; i++)//建立一个顺序表
{
S.a[i] = i*2;
S.size += 1;
}
printf("空为1,非空为0:%d\n", empty(S));
display(S);
append(&S, 7);
display(S);
int j = find(S, 5);
{
if (j == -1)
printf("顺序表中不存在所要查找的值\n");
else
printf("值为4的结点的下标为:%d\n", j);
}
j = find(S, 6);
{
if (j == -1)
printf("顺序表中不存在所要查找的值\n");
else
printf("值为6的结点的下标为:%d\n", j);
}
get(S, 5);
insert(&S, 3, 100);
display(S);
dele(&S, 5);
display(S);
}