数据结构C语言版:线性表之顺序表
线性表是一个线性结构。线性表采用顺序存储的方式
存储就称为顺序表。那么定义一种数据结构就是要描术出数据的逻辑结构、存储结构和运算集合。存储结构是一个结构体,运算集合包括:初始化、
插、删、改、打印、搜索等。顺序表的类型描述如下: ADT sequence\_list{ 数据集合 K: K={k(1), k(2), ...,k(n)}, n >=0, K中的地素是datatype类型; 数据关系 R: R={r} r={ | i=1, 2, ..., n-1} 操作集合: (1) void init(sequence\_list *slt);顺序表的初始化---置空表 (2) void append(sequence\_list *slt, datatype x); 在顺序表后部插入值为x的结点 (3) void display(sequence\_list slt);打印顺序表的各结点值 (4) int empty(sequence\_list slt);判断顺序表是否为空 (5) int find(sequence\_list slt, datatype x);查找顺序表中值为x的结点位置 (6) datatype get(sequence\_list slt, int i);取得顺序表中第i个结点的值 (7) void insert(sequence\_list *slt, datatype x, int position);在顺序表的postion位置插入值为x的结点 (8) void dele(sequence\_list *slt, int position);删除表中第position位置的结点 }ADT sequence\_list; 下面用C代码实现:
csequlist.h文件定了数据结构,声明了基于数据结构的操作集:
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt);
void append(sequence_list *slt, datatype x);
void display(sequence_list slt);
int empty(sequence_list slt);
int find(sequence_list slt, datatype x);
datatype get(sequence_list slt, int i);
void insert(sequence_list *slt, datatype x, int position);
void dele(sequence_list *slt, int position);
csequlist.cpp定义了数据结构的操作集:
#include "stdafx.h"
#include < iostream >
#include "csequlist.h"
void init(sequence_list *slt)
{
slt->size = 0;
}
void append(sequence_list *slt, datatype x)
{
if(slt->size == MAXSIZE)
{
printf("顺序表当前已满");exit(1);
}
slt->a[slt->size] = x;
++slt->size;
}
void display(sequence_list slt)
{
if(!slt.size) printf("\n顺序表是空的");
else
for(int i = 0; i < slt.size; ++i) printf("%5d", slt.a[i]);
}
int empty(sequence_list slt)
{
return (slt.size == 0 ? 1 : 0);
}
int find(sequence_list slt, datatype x)
{
int i = 0;
while(i < slt.size && slt.a[i] != x) ++i;
return (i < slt.size ? i : -1);
}
datatype get(sequence_list slt, int i)
{
if(i < 0 || i >= slt.size)
{
printf("\n指定的位置的结点不存在");exit(1);
}
else
return slt.a[i];
}
void insert(sequence_list *slt, datatype x, int position)
{
int i;
if(slt->size == MAXSIZE)
{
printf("\n顺序表当前已满");exit(1);
}
if(position < 0 || position > slt->size)
{
printf("\n指 定的插入位置不存在");exit(1);
}
for(i = slt->size;i > position; --i) slt->a[i] = slt->a[i-1];
slt->a[position] = x;
++slt->size;
}
void dele(sequence_list *slt, int position)
{
int i;
if(slt->size == 0)
{
printf("\n顺序表是空的!");exit(1);
}
if(position < 0 || position > slt->size)
{
printf("\n指 定的删除位置不存在");exit(1);
}
for(i = position; i < slt->size-1; ++i)
{
slt->a[i] = slt->a[i+1];
}
--slt->size;
}
main.cpp
sequence_list s;
init(&s);
append(&s, 100);
append(&s, 200);
insert(&s, 150, 1);
display(s);
std::cout << "\nPress Enter or Return to exit!";
std::cin.get();
return 0;