單鏈表實現 C語言

2021-10-02 11:13:04 字數 3941 閱讀 6356

單鏈表分為帶頭結點和不帶頭結點。

頭結點是和普通結點一樣,有資料域,指標域。資料域存放鍊錶結點的個數,指標域存放指向鍊錶的指標。

不帶頭結點是指煉表有乙個單純的指標,指向鍊錶,不儲存資料。

#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語言實現了單鏈表的基本操作,共有四個檔案,兩個標頭檔案是常用的,後兩個分別是主函式,和對鍊錶的基本操作函式,倒入時候,須將四個檔案放在同乙個目錄下。二 心得 在書寫過程中,主要錯誤集中在指標的使用上,通過此次程式設計,對於指標的認識更加深刻,頭結點的存在,更大意義上是為了簡化指標...