迴圈單鏈表簡單選擇排序
阿新 • • 發佈:2019-02-01
#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data ; struct LNode *next ; }LNode , *LinkList; LinkList Createlist( LinkList L){ int num ; LNode *p , *r = L ; printf("請輸入資料:\n"); scanf("%d",&num) ; while( num!= -1 ){ p = (LNode *)malloc(sizeof(LNode)); p->data = num ; r->next = p ; r = p ; scanf("%d",&num) ; } r->next = L ; //將尾指標指向頭結點 return L ; } void ViewLinklist( LinkList L ){ LNode *p = (LNode *)malloc(sizeof(LNode)); p = L->next ; printf("迴圈單鏈表為:"); while( p!=L ){ printf("%d ->",p->data); p = p->next ; } printf("%d",p->data); } void SelectSort ( LinkList L ){ LNode *p = (LNode *)malloc(sizeof(LNode)) ; LNode *pre = (LNode *)malloc(sizeof(LNode)) ; LNode *minp = (LNode *)malloc(sizeof(LNode)) ; LNode *minpre = (LNode *)malloc(sizeof(LNode)) ; while(L->next!=L){ //表不空,迴圈 p = L->next ; pre = L ; minp = p ; minpre = pre ; while(p!=L){ //注意迴圈單鏈表進行一次排序的條件 if(p->data < minp->data){ minp = p ; minpre = pre; } pre = p ; p = p->next ; } printf("%d ",minp->data); minpre->next = minp ->next ; free(minp); } free(L); } int main() { LinkList L = (LinkList )malloc(sizeof(LNode)); Createlist( L) ; ViewLinklist(L); printf("\n"); printf("簡單選擇排序:"); SelectSort(L); return 0; }