歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved