C++中如何建立一个顺序表


准备数据

#define MAXLEN 100 //定义顺序表的最大长度
struct DATA
{
 char key[10]; //结点的关键字
 char name[20];
 int age;
};
struct SLType //定义顺序表结构
{
 DATA ListData[MAXLEN+1];//保存顺序表的结构数组
 int ListLen;   //顺序表已存结点的数量
};

定义了顺序表的最大长度MAXLEN、顺序表数据元素的类型DATA以及顺序表的数据结构SLType。

在数据结构SLType中,Listen为顺序表已存结点的数量,也就是当前顺序表的长度,ListData是一个结构数组,用来存放各个数据结点。

我们认为该顺序表是一个班级学生的记录。其中,key为学号,name为学生的名称,age为年龄。

因为数组都是从下标0开始的,为了使用方便,我们从下标1开始记录数据结点,下标0的位置不可用。

初始化顺序表

在使用顺序表之前,首先创建一个空的顺序表,也就是初始化顺序表。这里,在程序中只需设置顺序表的结点数量ListLen为0即可。这样,后面需要添加的数据元素将从顺序表的第一个位置存储。

示例代码:

void SLInit(SLType * SL) //初始化顺序表
{
 SL->Listlen=0;
}

计算线性表的长度

计算线性表的长度也就是计算线性表中结点的个数,由于我们在SLType中定义了ListLen来表示结点的数量,所以我们只需要获得这个变量的值即可。

int SLLenght(SLType *SL)
{
 return(SL->ListLen); //返回顺序表的元素数量
}

插入结点

插入节点就是在线性表L的第i个位置上插入一个新的结点,使其后的结点编号依次加1。

这时,插入一个新节点之后,线性表L的长度将变为n+1。插入结点操作的难点在于随后的每个结点数据都要向后移动,计算机比较大,示例代码如下:

int SLInsert(SLType *SL,int n,DATA data)
{
 int i;
 if(SL->ListLen>=MAXLEN) //顺序表结点数量已超过最大数量
 {
  cout<<"顺序表已满,不能插入结点!"<<endl;
  return 0;   //返回0表示插入不成功
 }
 if(n<1||n>SL->ListLen) //插入结点的序号不合法
 {
  cout<<"插入序号错误!"<<endl;
  return 0;
 }
 for(i=SL->ListLen;i>=n;i--) //将顺序表中的数据向后移动
 {
  SL->ListData[i+1]=SL->ListData[i];
 }
 SL->ListData[n]=data;
 SL->ListLen++;
 return 1;
}

在程序中首先判断顺序表结点数量时候已超过最大数量,以及插入点的序号是否正确。前面条件都瞒住以后,便将顺序表中的数据向后移动,同时插入结点,并更新结点数量ListLen。

追加结点

追加结点就是在顺序表的尾部插入结点,因此不必进行大量数据的移动,代码实现与插入结点相比就要简单的多。

int SLAdd(SLType * SL,DATA data)
{
 if(SL->ListLen>=MAXLEN)
 {
  cout<<"顺序表已满,不能再添加结点了!"<<endl;
  return 0;
 }
 SL->ListData[++SL->ListLen]=data;
 return 1;
}

二叉树顺序表示的实现(C语言)

C++的输出精度控制

C++成员函数的存储方式

C++集成开发环境 Code::Blocks

C++中几个预定义变量的介绍

将Emacs配置成一个C/C++的IDE编程环境

 

更多精彩内容请看下一页

  • 1
  • 2
  • 3
  • 下一页

相关内容