题目:
解析:
此题时一个关于带头双向链表的问题,并且加入了选择排序的知识。
代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct DList
{int data;struct DList* next;struct DList* prev;
}DL;
DL* DLInit(DL** ps)
{//创建带哨兵位的头结点*ps = (DL*)malloc(sizeof(DL));(*ps)->next = *ps;(*ps)->prev = *ps;return *ps;
}
void DListCreate(DL** ps, int n)
{DL* cur = *ps;DL* newHead = cur;int x = 0;while (n){scanf("%d", &x);getchar();DL* newnode = (DL*)malloc(sizeof(DL));newnode->data = x;newHead->prev = newnode;newnode->next = newHead;cur->next = newnode;newnode->prev = cur;cur = newnode;n--;}
}
void DListSort(DL** ps)
{//用直接选择排序DL* head = *ps;DL* prev = head->next;DL* cur = prev->next;while (prev != head){while (cur != head){if (cur->data < prev->data){int tmp = cur->data;cur->data = prev->data;prev->data = tmp;}cur = cur->next;}prev = prev->next;cur = prev->next;}
}
void DListPrint(DL** ps)
{DL* cur = (*ps)->next;while (cur != *ps){printf("%d ", cur->data);cur = cur->next;}
}
int main()
{DL* plist = DLInit(&plist);int n = 0;scanf("%d", &n);getchar();DListCreate(&plist, n);DListSort(&plist);DListPrint(&plist);return 0;
}