1. 程式人生 > >C語言:用單鏈表實現輸入排序

C語言:用單鏈表實現輸入排序

純當練習
連結串列頭結點儲存的資訊是連結串列長度
平臺VS2015

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct ListNode {
    int val;
    struct ListNode *next;
};
void createList(struct ListNode* list, int listsSize) {
    struct ListNode *listHead = list;       //指向頭結點的頭指標
    struct ListNode *
tail = listHead->next; //指向最後一個元素的尾指標 struct ListNode *p; //在頭指標和尾指標之間活動的指標 struct ListNode *body; //用於建立新的節點 int i = 0; if (listsSize <= 0) return; srand(time(NULL)); //用於建立隨機數,我用隨機數模擬了輸入(懶),見21行和28行 puts("input:data"); body = (struct ListNode *
)malloc(sizeof(struct ListNode)); body->next = NULL; body->val = rand() % 10; body->next = listHead->next; listHead->next = body; tail = body; while (i<listsSize-1) { body = (struct ListNode *)malloc(sizeof(struct ListNode)); body->next =
NULL; body->val = rand() % 10; if (body->val <= listHead->next->val) {//如果資料小於第一個節點的資料(也就是頭指標的下一個節點), //就插在頭指標及其後一個節點之間 body->next = listHead->next; listHead->next = body; } else if (body->val > tail->val) {//資料大於尾指標,則放到連結串列最後 tail->next = body; tail = tail->next; } else {//在第一個節點和最後一個節點範圍之間,則尋找合適的大小位置 p = listHead->next; while (body->val > p->next->val&&p != tail) { p = p->next; } body->next = p->next; p->next = body; } i++; } list->val = listsSize; } void DisplayList(struct ListNode *list) { struct ListNode *p = list->next; int i = 0; while (i < list->val-1) { printf("%d->", p->val); p = p->next; i++; } printf("%d", p->val); } void DestroyList(struct ListNode *list) { struct ListNode *p = list->next; while (p!= NULL) { free(list); list = p; p = p->next; } free(list); } int main() { struct ListNode *list = (struct ListNode *)malloc(sizeof(struct ListNode)); //預設建立連結串列長度為5 createList(list, 5); //列印連結串列 DisplayList(list); DestroyList(list); system("pause"); return 0; }