@toc資料結構之鍊錶(c語言)
因為是機械專業學生,不像計算機專業的同學經常部落格,這是我第一次寫部落格,排版可能會有些混亂,還望大家見諒。
學習了三天的鍊錶,做一次總結和分享。
使用的軟體是visual studio 2019
1、線性表(linear list):是由n(n>=0)個資料元素(結點)a1,a2,…an組成的有限序列。該序列中的所有結點具有相同的資料結構。其中資料元素的個數n稱為線性表的長度。
2、順序表:把線性表的結點按邏輯順序依次存放在一組位址連續的儲存單元裡。用這種方法儲存的線性表簡稱為順序表。
3、鍊錶:用一組任意的儲存單元儲存線性表中的資料元素。用這種方法儲存的線性表簡稱為線性鍊錶。
lnode *creat_linklist_head(void)
return(head);
}lnode *creat_linklist_tail(void)
return(head);
}elemtype get_elem(lnode* l, int i)
if (j != i) return(-32768);
else return(p->data);
/* p為null表示i太大;j>i表示i為0 */
}lnode* locate_node(lnode* l, int key)
}void insert_lnode(lnode* l, int i, elemtype e)
printf("j=%d", j);
printf("i=%d", i);
if (j != (i - 1)) printf("i太大或i為0!!\n");
else
}void delete_linklist_locate(lnode* l, int i)
if (j != i) printf("i太大或i為0!!\n");
else
}void delete_linklist_key(lnode* l, int key)
if (q->data == key)
else printf("所要刪除的節點不存在!!\n");
}void delete_linklist_node(lnode* l, int key)
else }}
void delete_node_value(lnode* l)
else
}p = p->next;
} }}lnode* merge_linklist(lnode* la, lnode* lb)
/* 將pa所指的結點合併,pa指向下乙個結點 */
if (pa->data > pb->data)
if (pa->data == pb->data)
if (pa != null) pc->next = pa;
else pc->next = pb; /* 將剩餘的結點鏈上 */
free(lb);
return(lc); }}
void printf_linklist(lnode* l)
}
typedef struct dulnode dulnode;
dulnode* creat_dullinklist_head(void)
return(head);
}void printf_dullinklist(dulnode* l)
}dulnode* creat_dullinklist_tail(void)
return(head);
}elemtype get_dulelem(dulnode* l, int i)
if (j != i) return(-32768);
else return(p->data);
/* p為null表示i太大;j>i表示i為0 */
}dulnode* locate_dulnode(dulnode* l, int key)
}void insert_dullnode(dulnode* l, int i, elemtype e)
if (j != (i - 1)) printf("i太大或i為0!!\n");
else
}void delete_dullinklist_locate(dulnode* l, int i)
if (j != i) printf("i太大或i為0!!\n");
else
}void delete_dullinklist_key(dulnode* l, int key)
if (q->data == key)
else printf("所要刪除的節點不存在!!\n");
}void delete_dullinklist_node(dulnode* l, int key)
else }}
void delete_dulnode_value(dulnode* l)
else
}p = p->next;
} }}dulnode* merge_dullinklist(dulnode* la, dulnode* lb)
/* 將pa所指的結點合併,pa指向下乙個結點 */
if (pa->data > pb->data)
if (pa->data == pb->data)
if (pa != la)
else
pb->next = lc; lc->prior = pb;
free(lb);
} return(lc);
}} //該函式有問題,需改變
typedef struct ploy ploy;
ploy* creat_ploy(void)
} return(head);
}ploy* add_ploy_delete(ploy* la, ploy* lb)
if (pa->expn > pb->expn)
else if (pa->expn = pb->expn)
else
} } /* end of while*/
if (pa == null) pc->next = pb;
else pc->next = pa;
return(lc);
}void printf_polylist(ploy* l)
}ploy* add_ploy_reserve(ploy* la, ploy* lb) /* 生成的結點插入結果鍊錶的最後,pa指向下乙個結點 */
if (pa->expn > pb->expn) /* 生成的結點插入結果鍊錶的最後,pb指向下乙個結點 */
if (pa->expn == pb->expn)
else
} }/* end of while */
if (pb != null)
} if (pa != null)
} return(lc);
}
其他不多說了,以link.h及其main.c為例
link.h—>
#ifndef link_h_include
#define link_h_include
typedef int elemtype;
struct lnode;
typedef struct lnode lnode;
lnode *creat_linklist_head(void);
lnode *creat_linklist_tail(void);
elemtype get_elem(lnode* l, int i);
lnode* locate_node(lnode* l, int key);
void insert_lnode(lnode* l, int i, elemtype e);
void delete_linklist_locate(lnode* l, int i);
void delete_linklist_key(lnode* l, int key);
void delete_linklist_node(lnode* l, int key);
void delete_node_value(lnode* l);
lnode* merge_linklist(lnode* la, lnode* lb);
void printf_linklist(lnode* l);
#endif
main->
#define _crt_secure_no_warnings
#pragma warning(disable:4996)
#include #include #include #include#include "dullink.h"
#include "link.h"
typedef struct lnode lnode; /*結點的型別*/
int main()
希望可以堅持把資料結構學完。 資料結構 表之煉表
頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...
資料結構之鍊錶
頭結點 第乙個有效結點之前的那個結點 頭結點並不存有效資料 加頭結點的目的主要是為了方便對鍊錶的操作 頭指標 指向頭結點的指標變數 尾指標 指向尾節點的指標變數 如果希望通過乙個函式對鍊錶進行處理,只需要乙個引數 頭指標 首先要定義乙個單鏈表儲存結構 然後建立乙個空表,即初始化,我寫的這個提前設定好...
資料結構之鍊錶
鍊錶是一種基本的資料結構型別,它由乙個個結點組成。每乙個結點包括乙個資料的儲存和乙個指向下乙個結點的引用。在這個定義中,結點是乙個可能含有任意型別資料的抽象實體,它所包含的指向結點的應用顯示了它在構造鍊錶之中的作用。和遞迴程式一樣,遞迴資料結構的概念一開始也令人費解,但其實它的簡潔性賦予了它巨大的價...