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建立完成 頭插法建立單鏈表 頭結...