頭節點鍊錶

2021-08-05 19:27:06 字數 3405 閱讀 1928

linklist.h

#ifndef __linklist_h__

#define __linklist_h__

#define false 0

#define true 1

typedef int linkdata;

typedef struct _node

node;

// 建立鍊錶

node * create_list();

// 尾插

int insert_last(node *h, linkdata data);

// 頭插

int insert_head(node *h, linkdata data);

// 在第 pos 個結點處插入資料

int insert_pos(node *h, int pos, linkdata data);

//刪除 第 pos 個結點

int delete_pos(node* h, int pos);

// 逆序

int reverse_list(node *head);

// 刪除指定資料

int delete_data(node*, linkdata data);

// 查詢元素:如果有, 返回元素的位置

int find_element(node* h, linkdata data, int *x);

// 獲取順序表中的元素:通過位置獲取

int get_element(node* s, int pos, int *x);

int get_len(node * head);

// 清空所有結點

int clean_list(node * head);

// 銷毀鍊錶

int destroy(node *);

void display(node *h);

#endif

linklist.c

#include "linklist.h"

#include #include node * create_list()

int insert_head(node *h, linkdata data)

node->data = data;

node->next = h->next;

h->next = node;

return true;

}int insert_last(node *h, linkdata data)

node->data = data;

node->next = null;

node* tmp = h;

while (tmp->next)

tmp->next = node;

return true;

}int insert_pos(node *h, int pos, linkdata data)

if (tmp == null) // 越界

node *node = (node*)malloc(sizeof(node)/sizeof(char));

if (node == null)

node->data = data;

node->next = tmp->next;

tmp->next = node;

return true;

}int delete_pos(node* h, int pos)

if (tmp->next == null) // 越界

node *p = tmp->next;

tmp->next = p->next;

free(p);

return true;

}int reverse_list(node *h)

h->next->next = null;

h->next = pre;

return true;

}int delete_data(node* h, linkdata data)

if (tmp->next == null)

return false;

node *p = tmp->next;

tmp->next = p->next;

free(p);

return true;

}int find_element(node* h, linkdata data, int *x)

k++;

tmp = tmp->next; }

return false;

}int get_element(node* h, int pos, int *x)

if (tmp == null)

return false;

else

*x = tmp->data;

return true;

}int get_len(node * h)

return count;

}int clean_list(node * h)

return 0;

}void display(node *h)

printf ("\n");

}int destroy(node *h)

main.c

#include #include "linklist.h"

int main()

int i;

for (i = 0; i < 10; i++)

#if 0

for (i = 0; i < 10; i++)

insert_pos(head, 5, 1000);

insert_pos(head, 1, 2000);

insert_pos(head, 22, 2000);

insert_pos(head, 24, 2000);

insert_pos(head, 26, 2000);

delete_pos (head, 21);

reverse_list(head);

#endif

delete_data(head, 0);

int x;

find_element(head, 7, &x);

get_element(head, 8, &x);

printf ("%d\n", x);

printf ("%d\n", get_len(head));

display(head);

clean_list(head);

printf ("清空後:\n");

display(head);

return 0;

}

頭節點鍊錶C程式

main.c檔案 include include headnode.h int main for i 0 i 20 i 錯誤1 空表的情況下插入節點 insert pos head,0,2 正確 空表的情況下在第乙個節點處插入 insert pos head,1,2 錯誤2 空表的情況下在非第乙個節...

從無頭鍊錶中刪除節點

程式設計之美 第3.4節 從無頭鍊錶中刪除節點 問題 假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的乙個節點 不是第乙個也不是最後乙個節點 請將該節點從單鏈表中刪除 解法 題目中已經說明既不是頭節點也不是尾節點,因此不用考慮特殊情況。要解這個題首先的思路是尋找前乙個節點的指標,但是由於這是...

鍊錶問題技巧 使用偽頭節點

小技巧 對於鍊錶問題,建立頭節點時不知道合適的節點值,因此通常需要先初始化乙個預先指標 偽頭節點 pre,該指標的下乙個節點指向真正的頭結點head。使用預先指標的目的在於鍊錶初始化時無可用節點值。struct listnode listnode pre newlistnode 0 0為預先指標的值...