資料結構C++版-線性表

來源:互聯網
上載者:User

標籤:system   擷取   nodelist   src   操作   use   lib   code   get   

 

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++版-線性表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.