数据结构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;