綜合本章例9.9(建立連結串列的函式creat)、例9.10(輸出連結串列的函式print)和本章習題第7題(刪除連結串列中結點的函式del)、第8題(插入結點的函式insert),再編寫一個主函式,先後呼叫這些函式。用以上5個函式組成一個程式,實現連結串列的建立、輸出、刪除和插入,在主函式中指定需要刪除和插人的結點的資料
阿新 • • 發佈:2020-09-08
綜合本章例9.9(建立連結串列的函式creat)、例9.10(輸出連結串列的函式print)和本章習題第7題(刪除連結串列中結點的函式del)、第8題(插入結點的函式insert),再編寫一個主函式,先後呼叫這些函式。用以上5個函式組成一個程式,實現連結串列的建立、輸出、刪除和插入,在主函式中指定需要刪除和插人的結點的資料
#include <stdio.h> #include <stdlib.h> #define COUNT 5 typedef struct LNode { int num; struct LNode *next; } LNode; LNode* create(int n) { LNode *head, *p; head = (LNode *)malloc(sizeof(LNode)); p = head; //頭節點為0 加上頭節點共11個節點 head->num = 0; head->next = NULL; for (int i = 1; i <= n; i++) { LNode *newNode = (LNode *)malloc(sizeof(LNode)); newNode->num = i; newNode->next = NULL; p->next = newNode; p = p->next; } return head; } //在指定位置插入資料 void insert(int n, int positon, LNode *root) { //首先找到指定位置 while (positon--) { root = root->next; } //插入新的資料,重新連結插入點的前後節點關係 LNode *newNode = (LNode *)malloc(sizeof(LNode)); newNode->num = n; newNode->next = root->next; root->next = newNode; } void del(int n, LNode *root) { LNode *pre; while (root->num != n) { pre = root; root = root->next; } pre->next = root->next; } void printList(LNode *root) { printf("----\n"); int i = 0; while (root != NULL) { printf("node %d -> %d\n", i, root->num); root = root->next; i++; } } int main() { int n, position; printf("請輸入插入/刪除的數,及插入的位置,位置最大為:%d\n", COUNT); scanf("%d %d", &n, &position); LNode *head = create(COUNT); printList(head->next); insert(n, position, head->next); printList(head->next); del(n, head->next); printList(head->next); return 0; }
執行截圖: