緒論 線性表

2021-10-13 21:33:09 字數 3161 閱讀 5666

​ 資料結構三要素:邏輯、物理、資料的運算

​ 邏輯結構:集合、線性、樹型、網狀(圖形)

​ 儲存結構:順序、鏈式、索引、雜湊

​ 資料結構的運算:

​ - a.原子型別:不可再分的型別。(bool,int)

​ - b.結構型別:可分解的型別(struct)

​ - c.抽象資料型別:定義了乙個資料結構

演算法的特性:
定義:具有相同資料型別的n個資料元素的有限序列.n為表長,若n=0,則線性表為空表;i為表的位序(從1開始)

a1為線性表的表頭;an為線性表的表尾,除表頭元素,表中每個元素有且僅有乙個直接前驅,除表尾元素,表中每個元素有且僅有乙個直接後繼

線性表的特點:

優點:可隨機訪問,儲存密度高

缺點:要求大片連續空間,改變容量不方便

用順序儲存實現的線性表

//靜態表

#include using namespace std;

#define maxsize 10

typedef structseqlist;//靜態列表

void initlist(seqlist &l)//靜態列表初始化

void listinsert(seqlist &l,int i,int e)//插入操作

void listdelete(seqlist &l,int i int &e)//刪除操作

void getelem(seqlist l,int i)//按位查詢

void getvalue(seqlist l,int i,int e)seqlist;//定義線性表

void initlist(seqlist &l)//初始化動態表

//其餘操作與靜態表相似

int main()

2.2.1單鏈表

定義:用鏈式儲存的方式實現了線性的結構。結點(資料結構+指標)

優點:不要求大片連續空間,改變容量方便

缺點:不可隨機訪問,要消耗一定空間存放指標

//不帶頭節點

#include using namespace std;

typedef struct lnodelnode,*linklist;

bool initlist(linklist &l)

bool empty(linklist l)

void test()

//帶頭結點

bool initlist(linklist &l)

bool empty(linklist l)

帶頭結點——按位插入

bool insertnextnode(lnode *p,elemtype e)//後插操作

bool listinsert(listnode &l,int i ,elemptype e)

return insertnextnode(p,e);//結點p後插入資料

}

不帶頭結點

bool listinsert(listnode &l,int i ,elemptype e)

lnode *p;//指標掃瞄當前節點

int j=1;//當前p指向的結點

p=l;//l指向頭結點,頭結點是第0個結點(不存放資料)

while (p!=null && jnext;

j++;

} return insertnextnode(p,e);

}

//前插操作

bool insertpriornode(lnode *p,elemtype)

//刪除操作-按位刪除(帶頭結點)

bool listdelete(linklist &l,int i,elemtype &e)

if (p==null)

return false;

lnode *q=p->next;

e=q->data;//返回刪除的值

p->next=q->next;

free(q);

return true;

}

刪除制定節點p,但是刪除表尾元素會導致空指標

bool insertpriornode(lnode *p,elemtype)
//按位查詢

lnode * getelem(linklist l,int i)

return p;

}

2.2.2雙鏈表

相比單鏈表,多了乙個指向前驅元素的指標,在修改時也要注意修改前驅元素指標

//簡單舉例

bool deletenode(lnode *p)

//刪除操作簡單思路

//刪除p的後繼結點q

if (p==null) return false;

if (q==null) return false;

p->next=q->next;//q結點指向的指標讓p結點指定

if(q->next !=null)

q->next->prio=p;//q結點後的前指標,指向p,使得q沒有被任何結點指向

free(q);//釋放q空間

2.2.3迴圈單鏈表/迴圈雙鏈表

在其**邏輯上與單/雙鏈表毫無區別,主要不同表現在二者表尾/表頭或這前驅插入時,在刪除時也要將表尾指向表頭的指標進行修改

2.2.4靜態鍊錶

#define maxsize 10

typedef struct slinklist[maxsize];

思路:初始化時,頭結點的指標指向-1,其餘的next指向-2;

插入/刪除,修改next指標

順序表:隨機訪問,儲存密度大,大片連續分配空間不方便,改變容量不便

銷毀:靜態分配:系統自動**

動態分配:手動(free)

鏈式表:改變容量方便,不可隨機訪問,儲存密度低

開放式答題模版:

1.順序表與鍊錶的邏輯結構都是線性結構,都屬於線性表

2.但是二者儲存結構不同,順序表採用順序儲存(優點、缺點 ),鍊錶採用鏈式儲存(優點、缺點)

3.由於採用不同的儲存結構,基礎操作實現的效率也有所不同

鏈式線性表和順序線性表

在這裡插入 片 線性表的儲存結構 typedef struct seqlist typedef struct seqlist 順序表基本操作 初始化順序表在這裡插入 片 intseqlist init seqlist list,int size 插入資料元素在這裡插入 片 intseqlist in...

線性表演算法題庫 線性表習題

鍊錶。若指標p指向某結點時,能夠根據該指標找到其直接後繼,能夠順後繼指標鏈找到p結點後的結點。但是由於不知道其頭指標,所以無法訪問到p指標指向的結點的直接前趨。因此無法刪去該結點。2.雙鏈表。由於這樣的鍊錶提供雙向指標,根據p結點的前趨指標和後繼指標可以查詢到其直接前趨和直接後繼,從而可以刪除該結點...

刪除線性表節點 線性表

submit 81 solved 66 submit status web board 已知長度為n的線性表a採用順序儲存結構,請寫一時間複雜度為0 n 空間複雜度為0 1 的演算法,該演算法刪除線性表中所有值為item的資料元素。o 1 表示演算法的輔助空間為常量 輸入 n 6 輸入資料 1 2 ...