2023年考研資料結構複習 單鏈表

2021-09-25 10:08:54 字數 2771 閱讀 7257

2023年考研資料結構複習——單鏈表

**

#include #include #include #include #include "malloc.h"

//單鏈表儲存結構

typedef struct lnode

lnode, *linklist;

//頭插法

void createlist_l(linklist &l)

}void createlist_l2(linklist &l)

}//計算鍊錶的長度

int link_length(linklist l)

return length;

}//取得第i項的值,按位置查詢

int getelem(int i, linklist l)

}//返回最後乙個lnode節點

lnode* lastlnode(linklist l)

return p;

}//頭插法

void insert_head(linklist &l, int x)

//尾插法

void insert_tail(linklist &l, int x)

//刪除指定位置的節點,並返回其值

void delete_head(int i,int &x,linklist &l)

}//轉置

void reserve(linklist &l)

//q->next == null 即q是最後乙個結點

q->next = p;

l->next = q; //頭結點指向原來的最後乙個

}//單鏈表的公升序排序(採用氣泡排序)

void sort_list(linklist l)

p=q;

q=l;

}tail=q;//q->next==null,則q是最後乙個

}}//列印

void print(linklist l)

}int main()

createlist_l(l); //頭插法建立單鏈表

//createlist_l2(l); //尾插法建立單鏈表

//printf("%d\n",link_length(l)); //測試,輸出鍊錶長度

//printf("%d\n",getelem(2,l)); //取得第二項元素對應的值

//insert_head(l,4);

//insert_tail(l,5);

//int x;

//delete_head(1,x,l);//測試刪除是否成功

//reserve(l);//倒置的測試

//sort_list(l);//排序測試

print(l);

}

//還要寫單鏈表的排序

//逆置單鏈表

知識點結構體的別名問題:

node定義了乙個node型的節點物件,

pnode定義了乙個指向node型節點物件的node型指標;

給這個指向node結構體指標型別的node定義了乙個別名,

任何使用node*的地方都可以直接用pnode代替。

因使用時可能會忘記該別名是指標型別的,易犯錯,不建議使用。

其他鍊錶

迴圈鍊錶

與單鏈表的區別僅在於,判別鍊錶中最後乙個結點的條件由「後繼是否為空」變為「後繼是否為頭結點」

特點:(1)對於單鏈表僅能從頭結點開始遍歷整個鍊錶,而對於單迴圈鍊錶則可以從表中任意結點開始遍歷整個鍊錶。

(2)有時對鍊錶常做的操作是在表頭、表尾進行,此時可以使用表尾標識鍊錶,操作效率會提高。

雙向鍊錶

除了存在乙個指向後繼的指標域外,還存在乙個指向前驅的指標域

操作特點

(1)「查詢」和單鏈表相同

(2)「插入」和「刪除」時需要同時修改兩個方向上的指標;

插入:

newnode -> next = p -> next;

newnode -> prior = q->prior;

p -> next = newnode;

q -> prior = newnode;

刪除:

p -> next = node -> next;

q -> prior = node -> prior;

free(node);

特點

(1) 從某個結點出發到其直接前驅結點或直接後繼結點,時間複雜度均為o(1);

(2) 查詢第i個結點、向第i個結點插入 或 刪除第i個結點,都要區分是哪個方向;

(3) 如果是雙向迴圈鍊錶,修改指標要同時考慮在前驅結點和後繼結點上的修改;

(4) 某個結點的直接前驅的直接後繼,或它的直接後繼的直接前驅,即為該結點本身。

靜態鍊錶

與借助陣列來描述線性表的鏈式儲存結構不同,靜態鍊錶結點也有資料域data和指標域next,

但是與前面所講的鍊錶中的指標有所不同的是,這裡的指標是結點的相對位址(即陣列的下標),稱之為靜態指標。

靜態表適合於不支援指標的高階語言,或者最大元素值固定但插入、刪除操作頻繁的鍊錶操作中,有關基於靜態鍊錶的操作與動態鍊錶的相同。

特點:(1)所有資料元素均儲存在乙個連續的空間段,但是相鄰兩個元素不一定處於相鄰的空間。

(2)修改指標域即可以完成插入和刪除操作,不需要移動資料元素,但是也不能隨機訪問靜態鍊錶的元素。

(3)一次性分配所有儲存空間,插入、刪除時無需再向作業系統申請或釋放空間,但也限制了最大表長。

2020考研資料結構 408演算法2023年真題

1.第一步,現將首元素設為標記位flag,次數出現最多的元素設為maxelem,初始flag 陣列首元素,flag將標記位乙個乙個的與陣列每個元素比較,若相等,count 第二步,將陣列的第二個元素設為標記位,依次迴圈標記 第三部,若第二次的比第一次的count大,將最大的次數count設為最多位數...

考研資料結構複習 陣列(順序結構)

title 考研資料結構複習 subject 陣列 順序結構 author lxfhahaha language c語言 time 2018 10 4 19 25 include include include 用於訪問變長參數列 include define max array dim 8 假設陣...

考研資料結構筆記 單鏈表

單鏈表結點定義 typedef struct lnodelnode 定義單鏈表結點型別 尾插法建立單鏈表 頭結點 原有結點 新節點的位置 void createlistr lnode c,int a,int n r next null c的尾結點指標域置為null,c建立完成 頭插法建立單鏈表 頭結...