單鏈表分為帶頭結點和不帶頭結點。
頭結點是和普通結點一樣,有資料域,指標域。資料域存放鍊錶結點的個數,指標域存放指向鍊錶的指標。
不帶頭結點是指煉表有乙個單純的指標,指向鍊錶,不儲存資料。
#pragma once#ifndef _linklist_h//防止標頭檔案重複引用
#define _linklist_h
typedef int elemtype;//重新命名
#define linksize 10//巨集定義
#define true 1
#define false 0
typedef union datatype//聯合體
elemtype value;
int num;
}datatype;
typedef struct lnode//鍊錶結點
datatype data;//資料域
struct lnode* next;//指標域
}lnode,*linklistptr;//結構體成員,結構體指標
void init_linklist(linklistptr sq);//初始化
void insert_linklist(linklistptr sq, elemtype val, int pos);//插入
void insert_head_linklist(linklistptr sq, elemtype val);//頭插
void insert_tail_linklist(linklistptr sq, elemtype val);//尾插
int delete_linklist(linklistptr sq, int pos);//刪除
int delete_head_linklist(linklistptr sq);//頭刪
int delete_tail_linklist(linklistptr sq);//尾刪
void show_linklist(linklistptr sq);//列印
int getlength_linklist(linklistptr sq);//獲得長度
int clear_linklist(linklistptr sq);//清除
void destroy_linklist(linklistptr sq);//銷毀
linklistptr findlnode_pos(linklistptr sq,int pos);//查詢結點
linklistptr find_k_pos(linklistptr sq, int k);//查詢鍊錶倒數第k個結點
linklistptr if_intersect(linklistptr sq1, linklistptr sq2);//判斷鍊錶是否相交
void reverse_linklist1(linklistptr sq);//逆置鍊錶
void reverse_linklist2(linklistptr sq);//逆置鍊錶
#endif
#include"linklist.h"#include
#include
#include
#include
#include
//初始化
void init_linklist(linklistptr sq)
//頭插
void insert_head_linklist(linklistptr sq, elemtype val)
//尾插
void insert_tail_linklist(linklistptr sq, elemtype val)
//獲得鍊錶的長度
int getlength_linklist(linklistptr sq)
return 0;
}//刪除
int delete_linklist(linklistptr sq, int pos)
int delete_head_linklist(linklistptr sq)
//尾刪
int delete_tail_linklist(linklistptr sq)
//清除
int clear_linklist(linklistptr sq)
return true;
}//列印
void show_linklist(linklistptr sq)
printf("\n");
}//摧毀,呼叫清除即可
void destroy_linklist(linklistptr sq)
//查詢第pos個結點
linklistptr findlnode_pos(linklistptr sq, int pos)
//查詢倒數第k個結點
linklistptr find_k_pos(linklistptr sq, int k)
while (q != null)
free(q);
return p;
}//檢視兩個鍊錶是否相交
linklistptr if_intersect(linklistptr sq1, linklistptr sq2)
linklistptr q = sq1;
linklistptr p = sq2;
int m = sq1->data.num;
int n = sq2->data.num;
for (int i = 0; i < abs(m - n); i++)
else
p = p->next;
}while (q != null)
return null;
}//逆置鍊錶
void reverse_linklist1(linklistptr sq)
p->next = sq->next;
sq->next = p;
}//逆置鍊錶
/*定義三個指標,依次交換
*/void reverse_linklist2(linklistptr sq)
p->next = s;
sq->next = p;
}
#include "linklist.h"#include
int main()
for (int i = 15; i > 8; i--)
if (sq1.data.value == null || sq2.data.value == null)
show_linklist(&sq1);
printf("\n");
show_linklist(&sq2);
printf("\n");
delete_linklist(&sq1, 3);
show_linklist(&sq1);
printf("\n");
printf("\n");
//clear_linklist(&sq1);
insert_linklist(&sq1, 20, 5);
show_linklist(&sq1);
printf("\n");
linklistptr p = find_k_pos(&sq1, 2);
int j = p->data.value;
printf("%3d\n",j);
printf("\n");
reverse_linklist1(&sq1);
reverse_linklist2(&sq2);
show_linklist(&sq1);
printf("\n");
show_linklist(&sq2);
//destroy_linklist(&sq1);
//if_intersect(&sq1, &sq2);
return 0;
}
C語言單鏈表實現
今天分享一下單鏈表 有空頭 的一些操作!主要呢就是增 刪 列印!單鏈表可以比喻成一趟火車,有空頭的單鏈表就像是乙個火車頭拉著一節有一節的車廂。乙個車廂中有資料域和指標域,指標域用來連線,每節車廂肯定要有東西連著,不然就沒有方向了。如圖 所以連線的時候只要將指標域指向下乙個節點就是連線上了,然後刪除呢...
c語言單鏈表的實現
乙個簡單結點的結構體表示為 struct note 乙個簡單的單向鍊錶的圖示 1 鍊錶是結構 指標相結合的 種應用 它是由頭 中間 尾多個鏈環組成的單方向可伸縮的鍊錶 鍊錶上的鏈環我們稱之為結點。2 每個結點的資料可用 個結構體表示 該結構體由兩部分成員組成 資料成員與結構指標變數成員。3 資料成員...
c語言實現單鏈表
一 使用簡介 使用c語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...