資料結構 鍊錶

2021-08-05 19:28:08 字數 2770 閱讀 5240

#include

#include

#define ok            0

#define error        -1

#define malloc_error -2 

typedef int elementtype;

typedef struct node

node;

typedef node *pnode;     // 重新命名結點指標型別

// 頭插法建立鍊錶

//int create_list_head(struct node ** head, elementtype data)

int create_list_head(pnode *h, elementtype data)

// 將新資料賦給新結點

p->data = data;

p->next = *h;

*h = p;

}// 尾插法建立鍊錶

int create_list_tail(pnode *h, elementtype data)

node->data = data;

node->next = null;

// 將node加入到鍊錶最後,此處要考慮是否非空表

if (*h == null)   // 空表

else              // 非空表

temp->next = node;

}return ok;

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

int insert_node(pnode *h, int pos, elementtype data)

// 非空表

if (temp == null && *h != null)

// 新建結點

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

if (node == null)

node->data = data;

// 將結點插入到鍊錶中

if (*h == null || pos == 1)  // 插在表前  

else                         // 插在表中或末尾

return ok;

}// 將第 pos 個結點刪除

int delete_node(pnode *h, int pos)

pnode p = *h;

int k = 1;

while (p && k < pos-1)

if (p == null || k > pos-1)

pnode temp = p;

if (pos == 1)

else

free(temp);

temp = null;

return ok;

}// 鍊錶逆序

int inverse_list(pnode *h)

pnode pre  = *h;           // 當前結點的前乙個結點:初始化為指向第乙個結點的指標

pnode cur  = pre->next;    // 當前結點:初始化為指向第二個結點的指標

pnode temp = null;         // 用於儲存當前結點的下乙個結點指標

// 將各個結點逆序

while (cur)

// 處理頭指標和尾結點

(*h)->next = null;   // 原來的第乙個結點現在是最後乙個結點 要將其指標置空

*h = pre;            // 頭指標指向現在的第乙個結點也就是原來的最後乙個結點

return ok;

}// 查詢鍊錶中的元素,找到後返回改結點的指標

pnode search(pnode h, elementtype data)

pnode temp = h;

while(temp)

temp = temp->next;

}return null;

}// 計算鍊錶的長度

int listlen(pnode h)

return len;

}// 列印

void display(pnode head)

pnode temp = head;

while (temp)

printf ("\n");

}int main()

*/// 尾插法建立鍊錶

if (create_list_tail(&head, i) != ok) }

display(head);

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

if(insert_node(&head, 5, 11) != ok)

display(head); 

// 將第 pos 個結點刪除

if(delete_node(&head, 5) != ok)

display(head); 

// 將鍊錶逆序

if(inverse_list(&head) != ok)

display(head);

// 查詢鍊錶中的元素,找到後返回改結點的指標

pnode p = search(head, 18);

if (p == null)

else

// 計算鍊錶的長度

int len = listlen(head);

printf ("len = %d\n", len);

return 0;

}

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...

資料結構 鍊錶

鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...

資料結構 鍊錶

一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...