跟我一起學資料結構(C++語言版):連結串列
阿新 • • 發佈:2021-04-30
跟我一起學資料結構(C++語言版):連結串列
文章目錄
前言
學語言不學資料結構,猶如吃飯不放鹽,這可tm不是開玩笑。隨著我們的程式越寫越大,資料結構對我們也越來也重要。今天我們一起來學習連結串列。
一、連結串列是什麼
連結串列是通過一組任意的儲存單元來儲存線性表中的資料元素。那麼怎樣表示出資料元素之間的線性關係?為建立起資料元素之間的線性關係,對每個資料元素Vi,除了存放資料元素自身的資料資訊Vi之外,還需要存放其後繼Vi+1所在的儲存單元的地址,這兩部分資訊組成一個“結點”。如下圖:
二、建立連結串列
1.連結串列是由一個個結點構成的,先定義結點:
程式碼如下(示例):
typedef int datatype; //給 int 型別起一個別名 datatype
class item //建立一個結點類
{
public:
datatype data; //用於存放結點資料
item* next; //用於存放下一個結點的儲存位置
item() //建構函式
{
next = NULL;
}
};
2.建立連結串列類
一個基本的連結串列應該擁有一下功能:
1.從頭開始建立連結串列
2.從尾開始建立連結串列
3.建立帶表頭的連結串列(從頭)
4.建立帶表頭的連結串列(從尾)
6.查詢值為x的資料元素
7.查詢第i個元素
8.取第i個元素值
9.在連結串列第i個結點之前插入x
10.刪除連結串列中第i個結點
11.列印連結串列
程式碼如下(示例):
class link
{
public:
item* head; //連結串列頭指標
link()
{
head = NULL; //建構函式
}
~link()
{
DeleteAll();//解構函式
}
void initiate(); // 初始化
void DeleteAll();//刪除所有結點
void HeadCreate(int n);//從頭開始建立連結串列
void TailCreate (int n);//從尾開始建立連結串列
void HeadCreateWithHead(int n); //建立帶表頭的連結串列(從頭)
void TailCreateWithHead(int n); //建立帶表頭的連結串列(從尾)
int Length(); //求連結串列長度
item *Locatex(datatype x); //查詢值為x的資料元素
item *Locatei(int i); //查詢第i個元素
datatype Get(int i); //取第i個元素值
bool Insert(datatype x, int i); //在連結串列第i個結點之前插入x
bool Deleted(int i); //刪除連結串列中第i個結點
void Print(); //列印連結串列
};
3.初始化連結串列
程式碼如下(示例):
void link::initiate()
{
DeleteAll();//刪除所有結點
head = NULL;//頭指標指向空
}
4.從表尾到表頭建立單鏈表(不帶有空白頭結點)
連結串列是一種動態管理的儲存結構,連結串列中的每個結點佔用的儲存空間不是預先分配的,而是在執行時系統根據需求動態生成的,因此建立單鏈表應該從空表開始。可以在每讀入一個數據元素後申請一個結點,然後插在連結串列的頭部。
程式碼如下(示例):
void Link::HeadCreate(int n)//輸入的n為我們的連結串列長度
{
DeleteAll();//刪除所有結點
item *s, *p;//定義兩個結點類的指標
int i;
p=NULL;//先讓 p 指標指向空
for(i=1; i<=n; i++)//開始迴圈,建立長度為n的連結串列
{
s=new Item();//給指標 s 申請一塊新的記憶體
cin>>s->data;//輸入我們的資料
s->next=p;//讓s->next指向p的位置
p=s;
}
head=p;//把最新一個結點的資料賦值給head
}
5.從表頭到表尾建立單鏈表(不帶有空白頭結點)
程式碼如下(示例):
void Link::TailCreate(int n)
{
item *s, *r, *p;//頭指標為P,尾指標為r
int i;
DeleteAll();
p=NULL;
for(i=1; i<=n; i++)
{
s=new Item();
cin>>s->data;
s->next=NULL;
if(p==NULL)p=r=s;
else
{
r->next=s;
r=s;
}
}
head = p;
}
從表尾到表頭插入結點建立單鏈表比較簡單,但讀入的資料元素的順序與生成的單鏈表中元素的順序是相反的。若希望次序一致,則用從表頭到表尾建立單鏈表的方法。因為每次是將新結點插入連結串列的尾部,所以需加入一個指標r用來始終指向連結串列中的尾結點,以便能夠將新結點插入連結串列的尾部。
總結
連結串列是我們學習資料結構的入門操作,我再上面舉了幾個例子,其他的連結串列功能希望各位同學能觸類旁通,自己寫出來。