1. 程式人生 > >數據結構C++版-線性表

數據結構C++版-線性表

amp tro 下一個 筆記 ring void != 方便 com

PS:資料來源慕課網視頻。

一、什麽是線性表

線性表是n個數據元素的有限序列。

分類:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

二、補充知識點


1、棧和隊列有出操作、入操作,對應線性表(數組)為插入元素和刪除元素,而線性表中要獲取指定元素值可直接使用getelem()函數,獲取後並不刪除元素,可重復獲取。

【與只能使用一次的棧、隊列有區別】

2、順序表:遍歷和尋址非常快,插入、刪除效率低。

3、《鏈表算法說明》課程評論:靜態鏈表基於數組,動態鏈表基於結構體,所以線性表中的鏈表也有順序存儲結構


4、《鏈表編碼實戰一》課程筆記:

單鏈表中第一個節點的數據域是沒有意義的!!!因為這是一個哨兵節點,沒有別的指針指向這個頭節點的數據域。並且頭節點並不算在鏈表的長度當中!


5、《鏈表編碼實戰一》課程筆記:

初始化的過程是建立頭結點,而且與順序表不同的是,鏈表的表長size是不需要預先定義的,因為他可以從堆中臨時申請,這點與順序表有很大的不同。

按通用的做法,指向頭結點的指針(即頭指針)是固定的,頭結點是不固定的,頭結點不放元素,只放鏈表第一個結點的地址。

如果新插入或者刪除的元素不是鏈表的第一個帶元素的結點,或者這個位置的結點,頭結點就是固定的。

如果新插入一個結點到頭結點的下一個結點,或者刪除頭結點的下一個結點,頭結點中存放的指針就變了,頭結點也就變了。

6、《鏈表編碼實戰三》課程筆記:

哨兵節點(sentinel)是一個啞元節點(dummy node),可以簡化邊界條件。是一個附加的鏈表節點,該節點作為第一個節點,它的值域中並不存儲任何東西,

只是為了操作的方便而引入的。如果一個鏈表有哨兵節點的話,那麽線性表的第一個元素應該是鏈表的第二個節點。


7、《鏈表編碼實戰四》課程筆記:

單鏈表是有表頭結點的,表頭結點並不存儲數據,只是一個牽頭作用,方便我們通過它來尋找到鏈表的其他所有元素。

因此單鏈表的元素個數也不把它包括在內,第0個結點就是表頭結點的下一個結點。

三、應用實例-通訊錄

#include <stdlib.h>
#include <iostream>
#include <string>
#include "List.h"
#include "NodeList.h"
using namespace
std; int menu(); void newPerson(NodeList *p); void deletePerson(NodeList *p); void main ( ) { int userorder=0; NodeList p; while(userorder!=4) { userorder=menu(); switch(userorder) { case 1: cout<<"用戶指令-----新建聯系人"<<endl; newPerson(&p); break; case 2: cout<<"用戶指令-----刪除聯系人"<<endl; deletePerson(&p); break; case 3: cout<<"用戶指令-----瀏覽通信錄"<<endl; p.listTraverse(); break; case 4: cout<<"用戶指令-----退出通信錄"<<endl; break; default: break; } } system("pause"); } int menu() { cout<<"功能菜單"<<endl; cout<<"1.新建聯系人"<<endl; cout<<"2.刪除聯系人"<<endl; cout<<"3.瀏覽通信錄"<<endl; cout<<"4.退出通信錄"<<endl; cout<<"請輸入:"; int order; cin>>order; return order; } void newPerson(NodeList *p) { Node node; cout<<"請輸入姓名:"<<endl; cin>>node.data.m_strName; cout<<"請輸入電話號碼:"<<endl; cin>>node.data.m_strCode; p->listInsertTail(&node); } void deletePerson(NodeList *p) { Node node; cout<<"請輸入姓名:"<<endl; cin>>node.data.m_strName; cout<<"請輸入電話號碼:"<<endl; cin>>node.data.m_strCode; int temp; temp=p->locateElem(&node); if (temp==-1) { cout<<"該聯系人不存在"<<endl; return; } Node t; p->listDelete(temp,&t); cout<<"成功刪除聯系人"<<endl; }

數據結構C++版-線性表