根據使用者輸入的資料,建立一個有序連結串列
阿新 • • 發佈:2018-12-17
步驟分析 分析: 建立連結串列是一個從無到有的過程。 空連結串列是有序的 只有一個結點的連結串列是有序的 把一個結點,加入到一個有序連結串列中去,使其仍然有序.
那麼我們就需要一個插入操作 **找插入位置** 從小到大順序 在連結串列中去找到第一個比待插入元素值大的結點 比較, 那麼比較節點的前面就是插入位置 1.當連結串列上所有結點的值,都比待插入元素要小,待插入元素是老大 => 尾插入法最後一個結點的下一個 = p;最後一個指標指向 p; 2.當連結串列上第一個結點值就比待插入元素要大, 待插入元素是最小的 => 頭插法 不是第一個結點,在pk前面插入一個結點, 需要修改pk前面的那個結點 pr(找pk前面的那個結點)
struct node *first = NULL;//指向連結串列的第一個結點 struct node *last = NULL;//指向連結串列的最後一個結點 struct node *p = NULL;//指向新建立的那個結點 int d; while (1) { scanf("%d", &d); if (d == 0) { break; } // p = malloc(sizeof(struct node)); p->data = d; p->next = NULL; // if (first == NULL) { first = p; last = p; } else { struct node *pk = first; struct node *pr = NULL;// pr指向pk前面的那個結點 while (pk) { if (pk->data > p->data) { break; } pr = pk;//順路帶, pk = pk->next; } if ( pk == NULL) { last->next = p; last = p; } else { if (pk == first) { p->next = first; first = p; } else { p->next = pk; pr->next = p; } } } } } void print_list(struct node *p) { while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { struct node *h = create_LinkedList(); print_list(h); return 0; }