亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

如何在C++中建立一個順序表

2020-01-26 15:44:51
字體:
來源:轉載
供稿:網友

準備數據

復制代碼 代碼如下:

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

刪除結點

刪除結點就是刪除線性表L中的第i個結點,使得其后的所有節點編號依次減1.這是,刪除一個結點之后,線性表L的長度將變為n-1。刪除結點和插入結點類似,都需要進行大量數據的移動。

復制代碼 代碼如下:

int SLDelete(SLType *SL,int n) //刪除順序表中的數據元素
{
 int i;
 if(n<1||n>SL->ListLen) //刪除結點的序號不合法
 {
  cout<<"刪除序號錯誤!"<<endl;
  return 0;
 }
 for(i=n;i<SL->ListLen;i++)//將順序表中的數據向前移動
 {
  SL->ListData[i]=SL->ListData[i+1];
 }
 SL->ListLen--;   //順序表元素數量減1
 return 1;    //成功刪除返回1
}

查找結點

查找節點就是在線性表L中查找值為x的結點,并返回該節點在線性表L中的位置。如果在線性表中沒有找到值為x的結點,則返回一個錯誤標志。
根據x的類型不同,查找結點可以分為:

按照序號查找結點

對于一個順序表,序號就是數據元素在數組中的位置,也就是數組的下標標號。按照序號查找結點是順序表查找結點最常用的方法,這是因為順序表的存儲本身就是一個數組,示例代碼如下:

復制代碼 代碼如下:

DATA * SLFindByNum(SLType *SL,int n)//根據呼號返回數據元素
{
 if(n<1||n>SL->ListLen)   //查詢結點的序號不合法
 {
  cout<<"查詢序號錯誤!"<<endl;
  return 0;
 }
 return &(SL->ListData[n]);
}

按照關鍵字查找結點

關鍵字可以是數據元素中的任意一項。
這里以key關鍵字為例進行介紹,例如,可以通過key查找學生的信息。示例代碼如下:

復制代碼 代碼如下:

int SLFindByCont(SLType * SL,char *key)//按關鍵字查詢結點
{
 int i;
 for(i=1;i<=SL->ListLen;i++)
 {
  if(strcmp(SL->ListData[i].key,key)==0)//如果找到結點
  {
   return i;
  }
 }
 return 0;      //在整個表中都沒有找到,返回0
}

顯示所有的結點

示例代碼如下:

復制代碼 代碼如下:

void SLALL(SLType *SL)
{
 int i;
 for(i=1;i<SL->ListLen;i++)
 {
  cout<<"key:"<<SL->ListData[i].key<<endl;
  cout<<"name:"<<SL->ListData[i].name<<endl;
  cout<<"age:"<<SL->ListData[i].age<<endl;
  cout<<"============================="<<endl;
 }
}

順序表操作完整示例:

基本上就是把上面的函數放到一塊,集中展示了一下功能,代碼有些長,請耐心閱讀^.^

復制代碼 代碼如下:

#include<iostream>
#include<string>
using namespace std;
#define MAXLEN 100 //定義順序表的最大長度
/**************順序表的定義部分*****************/
struct DATA
{
 string key; //結點的關鍵字
 string  name;
 int age;
};
struct SLType //定義順序表結構
{
 DATA ListData[MAXLEN+1];//保存順序表的結構數組
 int ListLen;   //順序表已存結點的數量
};
/************順序表的初始化函數*****************/
void SLInit(SLType * SL) //初始化順序表
{
 SL->ListLen=0;
}
/***********計算線性表的長度*******************/
int SLLenght(SLType *SL)
{
 return(SL->ListLen); //返回順序表的元素數量
}
/*********插入結點*******************************/
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;     //成功插入,返回1
}
/***********************追加結點*************************/
int SLAdd(SLType * SL,DATA data)
{
 if(SL->ListLen>=MAXLEN)
 {
  cout<<"順序表已滿,不能再添加結點了!"<<endl;
  return 0;
 }
 SL->ListData[++SL->ListLen]=data;
 return 1;
}
/***********************刪除結點*************************/
int SLDelete(SLType *SL,int n) //刪除順序表中的數據元素
{
 int i;
 if(n<1||n>SL->ListLen) //刪除結點的序號不合法
 {
  cout<<"刪除序號錯誤!"<<endl;
  return 0;
 }
 for(i=n;i<SL->ListLen;i++)//將順序表中的數據向前移動
 {
  SL->ListData[i]=SL->ListData[i+1];
 }
 SL->ListLen--;   //順序表元素數量減1
 return 1;    //成功刪除返回1
}
/*******************按照序號查找結點********************/
DATA * SLFindByNum(SLType *SL,int n)//根據序號返回數據元素
{
 if(n<1||n>SL->ListLen)   //查詢結點的序號不合法
 {
  cout<<"查詢序號錯誤!"<<endl;
  return 0;
 }
 return &(SL->ListData[n]);
}
/*******************按照關鍵字查找結點********************/
DATA *SLFindByCont(SLType * SL,string name)//按關鍵字查詢結點
{
 int i;
 for(i=1;i<=SL->ListLen;i++)
 {
  if(SL->ListData[i].name==name)//如果找到結點
  {
   return &(SL->ListData[i]);
  }
 }
 return 0;      //在整個表中都沒有找到,返回0
}
/*******************顯示所有的結點********************/
void SLALL(SLType *SL)
{
 int i;
 for(i=1;i<=SL->ListLen;i++)
 {
  cout<<"key:"<<SL->ListData[i].key<<",name:"<<SL->ListData[i].name<<",age:"<<SL->ListData[i].age<<endl;
 }
}
int main()
{
 int i;
 SLType SL; //定義順序表變量
 DATA data; //定義結點保存數據類型變量
 DATA *pdata;//定義指向結點的指針變量
 string name;
 cout<<"順序表操作演示:"<<endl;
 SLInit(&SL);//初始化順序表
 do
 { //循環添加結點數據
  cout<<"請輸入要添加的結點(學號 姓名 年齡):";
  cin>>data.key>>data.name>>data.age;
  if(data.age)  //若年齡不為0
  {
   if(!SLAdd(&SL,data))//若添加結點失敗
   {
    break;   //退出循環
   }
  }else
  {
   break;
  }
 }while(1);
 cout<<"順序表中的結點順序為:" <<endl;
 SLALL(&SL);    //顯示所有的結點
 cout<<"請輸入要取出的結點序號:";
 cin>>i;
 pdata=SLFindByNum(&SL,i);//按序號查找結點
 if(pdata)
 {
  cout<<"第"<<i<<"個結點為:key:"<<pdata->key<<",name:"<<pdata->name<<",age:"<<pdata->age<<endl;
 }
 cout<<"請輸入要查找的姓名:";
 cin>>name;
 pdata=SLFindByCont(&SL,name);
 if(pdata)
 {
  cout<<"key:"<<pdata->key<<",name:"<<pdata->name<<",age:"<<pdata->age<<endl;
 }
 cout<<"請輸入您要刪除的結點的序號:";
 cin>>i;
 if(SLDelete(&SL,i))
 {
  cout<<"數據刪除成功"<<endl;
  SLALL(&SL); 
 }
 cout<<"請輸入您要插入的結點的序號:";
 cin>>i;
 cout<<"請輸入第"<<i<<"號結點的key,name,以及age"<<endl;
 cin>>data.key>>data.name>>data.age;
 if(SLInsert(&SL,i,data))
 {
  cout<<"插入數據成功"<<endl;
  SLALL(&SL); 
 }
 return 0;
}

運行界面:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久噜久噜久久综合| 亚洲天堂男人天堂女人天堂| 国产一区二区视频在线观看| 欧美大尺度激情区在线播放| 国产亚洲精品日韩| 国产精品久久久久久久7电影| 91日本在线观看| 综合国产在线视频| 欧美又大粗又爽又黄大片视频| 国产在线高清精品| 亚洲大胆美女视频| 亚洲欧美国产精品久久久久久久| 久久视频这里只有精品| 国产精品白嫩初高中害羞小美女| 久久成人精品电影| 98精品在线视频| 欧美性开放视频| 色一区av在线| 亚洲欧美综合图区| 久久久人成影片一区二区三区观看| 国产精品第10页| 美女黄色丝袜一区| 欧美在线xxx| 国产欧美一区二区三区在线看| 国产精品久久久久久搜索| 57pao成人国产永久免费| 国产日韩欧美在线视频观看| 色先锋资源久久综合5566| 夜夜嗨av一区二区三区免费区| 欧美日韩精品在线视频| 国产精品久久视频| 中文字幕国产精品久久| 亚洲va国产va天堂va久久| 亚洲一区二区自拍| 欧美国产日韩二区| 国产福利精品视频| 久久综合五月天| 精品女同一区二区三区在线播放| 色综久久综合桃花网| 亚洲天堂av在线免费| 日韩欧美成人免费视频| 亚洲欧美精品一区| 亚洲欧美成人精品| 庆余年2免费日韩剧观看大牛| 国产精品极品尤物在线观看| 亚洲精品一区中文字幕乱码| 国产亚洲精品久久久久久777| 国产91网红主播在线观看| 日韩av中文在线| 亚洲最新中文字幕| 91精品国产免费久久久久久| 国产精品久久久久久av福利软件| 亚洲美女精品久久| 欧美激情视频在线观看| 亚洲国产欧美在线成人app| 国产一区二区三区高清在线观看| 久久乐国产精品| 国产91色在线免费| 国模私拍视频一区| 国产91精品在线播放| 欧美日韩国产一区中文午夜| 国产精品亚洲一区二区三区| 青草青草久热精品视频在线观看| 91精品成人久久| 欧美成人在线免费| 亚洲电影免费观看| 久久综合国产精品台湾中文娱乐网| 亚洲www在线观看| 尤物九九久久国产精品的分类| 亚洲性无码av在线| 日韩视频精品在线| 国产精品女主播视频| 久久免费福利视频| 久久精品夜夜夜夜夜久久| 国产精品美女久久久免费| 日韩精品极品视频免费观看| 亚洲第一区中文字幕| 午夜精品美女自拍福到在线| 亚洲激情视频在线| 国产一区二中文字幕在线看| 97人人模人人爽人人喊中文字| 国产精品久久久久久久久久ktv| 国产精品一区二区电影| 九九热r在线视频精品| 国产精品99久久久久久久久| 日韩美女视频在线观看| 国产激情视频一区| 亚洲精品美女网站| 亚洲精品福利免费在线观看| 亚洲最新在线视频| 亚洲国产精品久久91精品| 亚洲男女自偷自拍图片另类| 亚洲最新视频在线| 国产一区红桃视频| 国产精品美女在线观看| 日韩av在线高清| 国产日韩欧美影视| 中文字幕在线成人| 日韩免费视频在线观看| 狠狠色狠狠色综合日日小说| 91网在线免费观看| 亚洲丝袜av一区| 亚洲成色777777女色窝| 国产精品2018| 色在人av网站天堂精品| 国产精品欧美一区二区| 日本精品免费一区二区三区| 91精品视频免费| 亚洲黄色www| 亚洲欧美中文字幕在线一区| 国产69精品久久久久9999| 欧美国产视频一区二区| 26uuu另类亚洲欧美日本一| 亚洲成人久久久| 国产精品免费看久久久香蕉| 欧美视频在线观看 亚洲欧| 欧美一区在线直播| 国产美女主播一区| 欧美激情按摩在线| 国产免费成人av| 欧美华人在线视频| 一夜七次郎国产精品亚洲| 国产激情综合五月久久| 久久久91精品国产一区不卡| 久久精品视频一| 久久手机精品视频| 成人在线激情视频| 久久久久中文字幕2018| 国产亚洲成av人片在线观看桃| 欧美日韩国产999| 久久久成人的性感天堂| 精品香蕉在线观看视频一| 亚洲精品黄网在线观看| 国产精品久久久精品| 国产精品中文字幕在线观看| 成人性生交大片免费看小说| 精品电影在线观看| 日韩中文有码在线视频| 国产精品久久电影观看| 57pao成人国产永久免费| 亚洲精品欧美一区二区三区| 性视频1819p久久| 亚洲欧美国产va在线影院| 国产日韩在线亚洲字幕中文| 久久久电影免费观看完整版| 在线看福利67194| 亚洲美女动态图120秒| 亚洲精品自拍第一页| 国产欧美日韩中文| 欧美极品少妇全裸体| 中文字幕国内精品| 一本色道久久88综合日韩精品| 国产精品视频男人的天堂| 久久久久日韩精品久久久男男| 91精品国产亚洲| 久久久久久久一区二区三区| 日韩中文字幕在线观看| 在线观看中文字幕亚洲| 国产精品久久久久久超碰| 国产日韩欧美视频在线| 亚洲a级在线观看| 亚洲电影第1页| 伊人久久综合97精品| 欧美日韩亚洲高清|