前言
這段時間將以前學習的東西整理了下,學欲進,常有疏,乙個人在學習過程中要不斷總結,這樣才會有所收穫。今天來總結下資料結構中煉表的知識,鍊錶無外乎離不開增刪改查,鍊錶(linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標(pointer)。
兩種鍊錶
(1)單鏈表
從圖中可以看出單向鍊錶只可向乙個方向遍歷,第乙個部分儲存或者顯示關於節點的資訊,第二個部分儲存下乙個節點的位址值。
(2)雙鏈表
1.建立鍊錶
(1)頭插法
從乙個空表開始,重複讀入資料,生成新結點,將讀入資料存放到新結點的資料域中,然後將新結點插入到當前鍊錶的表頭上,直到讀入結束標誌為止。即每次插入的結點都作為鍊錶的第乙個結點
(2)尾插法
頭插入法建立鍊錶雖然演算法簡單,但生成的鍊錶中結點的次序和輸入的順序相反。若希望二者次序一致,可採用尾插法建表。該方法是將新結點插入到當前鍊錶的表尾,使其成為當前鍊錶的尾結點。
2.查詢(兩種返回方式)
(1)按位置查詢
//查詢返回節點位置指標(2)按值查詢ldlnode search(dlnode q, int pos)
if (j == pos)
return r;
}
ldlnode search(dlnode q, int data1)3.修改return r;
}
//修改某節點資料4.刪除void modifynode(dlnode *&h, int pos, int data)
i++;}}
//刪除結點5.插入**void del(dlnode p, int pos)
else
else if (p1->next == null && p1->prior != null)//尾指標
else if (p1->prior == null && p1->next == null)//頭尾都為空
//頭尾都不為空
else
printf(「success! delete data」);}}
**//插入結點(在第pos位置上插入data)學生管理系統int insert(dlnode *&p, int data, int pos)
else
else
else if (p1->prior == null && p1->next == null)
else
}printf(「success insert data」);
}return 0;
}
#include#include
typedef struct dlnode dlnode,*ldlnode;
void menu()//功能選單
//建立雙鏈表
void createdlink(dlnode *&p,int n)
r->next = null;
}//鍊錶長度
int get_list(dlnode *head)
return len;
}//查詢節點位置指標
ldlnode find(dlnode *&q, int pos)
if (j == pos)return r;
else return null;
}//查詢結點,返回結點位置
int search(dlnode *q, int pos)
else
return 0;
}//修改某節點資料
void modifynode(dlnode *&h, int pos, int data)
i++;}}
//刪除結點
void del(dlnode *p, int pos)
else
else if (p1->next == null && p1->prior != null)
else if (p1->prior == null && p1->next == null)
else
printf(「success! delete data」);}}
//插入結點(在第pos位置上插入data)
int insert(dlnode *&p, int data, int pos)
else
else
else if (p1->prior == null && p1->next == null)
else
}printf(「success insert data」);
}return 0;
}//列印雙鏈表
void print(dlnode *p)
printf(」\n");
return;
}int main()
printf(「請輸入修改後的的資料:」);
scanf("%d", &data);
printf("\n");
modifynode(head,index,data);
break;
case 4:
printf("\n");
printf(「請輸入查詢的節點:」);
scanf("%d", &index);
search(head, index);
printf("\n");
break;
case 5:
printf("\n");
printf(「請輸入插入的資料:」);
scanf("%d", &data);
printf(「請輸入插入的位置:」);
scanf("%d", &index);
insert(head, data, index);
printf("\n");
break;
case 6:
printf("\n");
print(head);
printf("\n");
break;
default:
printf("\n");
printf(「請輸入正確的選擇\n」);
printf("\n");
break;}}
system(「pause」);
return 0;
}
鍊錶實現學生管理系統
include include include define maxlen 100 struct data 定義鍊錶的元素個體 typedef data elemtype struct sqlist 建立鍊錶 sqlist createlist sqlist l r next null printf...
學生資訊管理系統 鍊錶
實驗內容 定義乙個包含學生資訊 學號,姓名,成績 的鍊錶,使其具有如下功能 1 根據指定學生個數,逐個輸入學生資訊 2 逐個顯示學生表中所有學生的相關資訊 3 根據姓名進行查詢,返回此學生的學號和成績 4 根據指定的位置可返回相應的學生資訊 學號,姓名,成績 5 給定乙個學生資訊,插入到表中指定的位...
學生成績管理系統(鍊錶的實現)
所使用的標頭檔案 include include include 所呼叫的函式 struct link node creat struct link node head 建立新結點 int count node struct link node head 結點計數 void delete node ...