數據結構C++版-線性表
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++版-線性表