頭結點迴圈鍊錶 C語言

2021-08-05 19:27:06 字數 3238 閱讀 7293

#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 

#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 = h;

node* tmp = h;

while (tmp->next != h)

tmp->next = node;

return true;

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

if (tmp == h)   // 越界

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 == h)   // 越界

node *p = tmp->next;

tmp->next = p->next;

free(p);

return true;

}int reverse_list(node *h)

h->next->next = h;

h->next = pre;

return true;

}int delete_data(node* h, linkdata data)

if (tmp->next == h)

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 == h)

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)

#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;

}

頭結點鍊錶練習

這是乙份關於頭結點鍊錶的問題 完成一些基本的煉表處理函式,包括插入,查詢,刪除,輸出等一些功能的實現 include include include linklist.h node creat list 尾插法 int insert last node head,linkdata data 頭插法 ...

無頭結點鍊錶

include include linklist.h struct node create linklist creat linklist 根據使用者輸入,建立乙個單鏈表 struct node pnew struct node malloc sizeof struct node pnew data...

C語言 建立單向鍊錶的頭結點以及遍歷鍊錶

建立頭節點 鍊錶的頭結點位址右函式值返回 node slistcreat 給head的成員變數賦值 head id 1 head next null node pcur head node pnew null int data while 1 新節點動態分配空間 pnew node malloc s...