單鏈表實現大於第一個元素的節點在後,小於第一個節點的元素在前
阿新 • • 發佈:2018-12-08
#include<stdio.h> #include<iostream> #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct Node //結構型別定義 { ElemType data; struct Node * next; }Node, *Linklist; /*Linklist為結構指標型別*/ void InitList(Linklist *L) /*初始化單鏈表*/ { *L = (Linklist)malloc(sizeof(Node)); /*建立頭結點*/ (*L)->next = NULL; /*建立空的單鏈表L*/ } void CreateFromHead(Linklist L) /*用頭插法建立單鏈表*/ { Node *s; char c; int flag = 1; while (flag) /*flag初值為1,當輸入“#”時,置flag為0,建立表結束*/ { c = getchar(); if (c != '#') { s = (Node*)malloc(sizeof(Node)); /*建立新結點s*/ s->data = c; s->next = L->next; /*將s結點插入表頭*/ L->next = s; } else flag = 0; } } int changgelist(Linklist L) { Node *p1, *pre, *p, *q; if (L->next == NULL) return ERROR; p1 = L->next; /*p1指向表中第一元素*/ pre = p1; p = p1->next; /*順次從p開始取結點,比p1->data小的插在頭結點之後,比p1->data大的結點不作處理,繼續檢測其後續結點*/ while (p) { q = p->next; if (p->data >= p1->data) { pre = p; p = q; } else { pre->next = p->next; p->next = L->next; L->next = p; p = q; } } return OK; } void main() { Linklist l; Node *p; InitList(&l); printf("建立單鏈表,請輸入連結串列資料,以#結束!\n"); CreateFromHead(l); p = l->next; printf("建立的單鏈表為:\n"); while (p != NULL) { printf("%c ", p->data); p = p->next; } changgelist(l); p = l->next; printf("\n改變後的單鏈表為:\n"); //printf("%c", p->data); p = l->next; while (p != NULL) { printf("%c ", p->data); p = p->next; } }