c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
生活随笔
收集整理的這篇文章主要介紹了
c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
「今天是學習C語言第 148 天」
紙上學來終覺淺,絕知此事要躬行?!?陸游「冬夜讀書示子聿」# 靜態鏈表
使用數組實現,利用數組下標代替指針,從而實現數據結點之間的先后關系。實現要點:
1.數組下標為0的位置為頭結點,指向自身時表明鏈表為空。
2.數組下標為1的位置為空間備用鏈表的頭結點,保存未被使用的數組空間。
3.數組下標代替指針來理解鏈表結構。
備注:從邏輯結構來看,其實有兩個鏈表存在的數組中,一個用于保存數據的鏈表,一個是未使用的空閑鏈表。另外鏈表其它實現參見:
C語言實現常用數據結構:帶頭結點的單鏈表(第3篇)
C語言實現常用數據結構:不帶頭結點的單鏈表(第4篇)
# 使用示例
功能:輸入數據個數和數據,逆序保存到順序表,并逆序輸出顯示到屏幕。
運行結果如下:
請輸入數據總個數:10
請依次輸入10個整數:0 1 2 3 4 5 6 7 8 9
鏈表輸出結果:9 8 7 6 5 4 3 2 1 0
鏈表刪除5位置數據后輸出結果:9 8 7 6 4 3 2 1 0
# 代碼實現
/* ========================================== 名稱 :C語言實現常用數據結構 功能 :靜態單鏈表 環境 :Windows 10 + Dev-C++編譯 作者 :一只會C的貓 公眾號 :C語言大全(coderpointer) 時間 :2020.8.13 ==========================================*/#include #include // 鏈表最大長度#define?MAX_SIZE?1000// 靜態鏈表使用數組下標代替指針 // cur表示數組下標指向下一個結點位置 typedef struct list_node{ int data;??int?cur;}list_node;// 使用一維數組實現單鏈表 list_node link_list[MAX_SIZE]; // 初始化數組為空鏈表// link_list[0]為鏈表頭結點// link_list[1]為空閑備用鏈表,用于記錄未使用過的數組空間 void init_link_list(){ // 當頭結點的下標指向自己時,鏈表為空 link_list[0].cur = 0; // 空鏈表時,所有的空間均未使用 int i; for(i=1; i-1; i++) link_list[i].cur = i+1; link_list[MAX_SIZE-1].cur = 0;} // 增加數據 int insert_link_list(int data){ // 空間已滿,返回-1 if(link_list[1].cur == 0) return -1; // 在空閑備用鏈表中尋找一個空閑的位置存放數據 int pos = link_list[1].cur; link_list[1].cur = link_list[pos].cur; // 頭插法,直接將數據插入鏈表第一個位置 link_list[pos].data = data; link_list[pos].cur = link_list[0].cur; link_list[0].cur = pos; return 0;}// 刪除指定位置 int delete_link_list(int *data, int pos){ if(data == NULL || link_list[0].cur == 0 || pos < 1) return -1; // 找到pos位置的前一個結點 int i = 1; int cur = 0; while(i { i++; cur = link_list[cur].cur; } if(i==pos && link_list[cur].cur) { int t = link_list[cur].cur; *data = link_list[t].data; link_list[cur].cur = link_list[t].cur; link_list[t].cur = link_list[1].cur; link_list[1].cur = t;??} return 0; }// 查看 void print_link_list(){ int cur = link_list[0].cur; while(cur != 0) { printf("%d ", link_list[cur].data); cur = link_list[cur].cur; }??printf("\n"); } int main(void){ init_link_list(); int n,d; printf("請輸入數據總個數:"); scanf("%d", &n); printf("請依次輸入%d個整數:", n); int i; for(i=0; i { scanf("%d", &d); // 每次插入到鏈表首位,這樣實現倒序 insert_link_list(d); } printf("靜態鏈表輸出結果:"); print_link_list(); printf("靜態鏈表刪除%d位置數據后:",n/2); delete_link_list(&d, n/2); print_link_list(); return 0;}---------- End ----------
往期精彩推薦:
一萬分鐘C語言學習計劃:2020開篇
C語言內存管理的兩種方式
C89標準庫功能簡介
C語言鏈接與存儲類型
C語言標準輸入輸出
C語言入門基本語法
更多請點擊公眾號歷史文章...
「喜歡C請賞個?贊? ? 點擊右下角?在看」
總結
以上是生活随笔為你收集整理的c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴志强院士:CIM与城市未来
- 下一篇: 供应商:小米汽车尚未量产 只是前期送样和