基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
要求就是在雙向鏈表上實現快速排序:(.cpp文件)
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2typedef struct DuLNode{//雙向鏈表的定義
int data;//數據域
struct DuLNode *prior;//前一個指針
struct DuLNode *next; //后一個指針
}DuLNode,*DuLinkList;void InitDuList(DuLinkList &L,DuLinkList &front,DuLinkList &rear)//初始化一個雙向鏈表
{
int data;
DuLinkList p,q;
p=L;//這個雙向鏈表是有頭指針的
printf("請輸入待排序的序列(以-1結束):");
scanf("%d",&data);
while (data!=-1)//循環建立雙向鏈表
{
q=(DuLinkList) malloc(sizeof(DuLinkList));//申請鏈表的節點空間
q->data=data;
q->prior=p;//p表示當前結點的前一個節點
p->next=q;
p=p->next;//p指向下一個節點
q->next=NULL;//當前結點的next指針域賦值為空
scanf("%d",&data);
}
rear=q;
front=L->next;
};DuLinkList Partition(DuLinkList &L,DuLinkList low,DuLinkList high)//快速排序中找樞軸記錄
{
L->data=low->data;//把最前面一個數據作為樞軸記錄,放到頭節點的數據域上
while(low!=high){//循環條件是low和high不相等
while(low!=high&&high->data>=L->data)
high=high->prior;
low->data=high->data;
while(low!=high&&low->data<=L->data)
low=low->next;
high->data=low->data;
}
low->data=L->data;
return low;
};void Qsort(DuLinkList &L,DuLinkList low,DuLinkList high)//快速排序的主函數
{
DuLinkList pivoloc;
if(low!=high){
pivoloc=Partition(L,low,high);//找到樞軸記錄的地址
if(pivoloc!=low)//如果樞軸記錄的地址不等于低位的地址,則對在樞軸記錄之前的那部分進行快速排序
Qsort(L,low,pivoloc->prior);
if(pivoloc!=high)//如果樞軸記錄的地址不等于高位的地址,則對在樞軸記錄之后的那部分進行快速排序
Qsort(L,pivoloc->next,high);
}
};void printList(DuLinkList L)//打印整個雙向鏈表
{
DuLinkList p;
p=L->next;
printf("快速排序過后的結果為:");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
};
int main()
{
DuLinkList L,front,rear;
L=(DuLinkList)malloc(sizeof(DuLinkList));
L->prior=L->next=NULL;
front=rear=NULL;
InitDuList(L,front,rear);
Qsort(L,front,rear);
printList(L);
system("pause");
return 0;
}
附帶說下,在Dev C++中編譯通過,VS2012中也編譯通過,但是在Dev C++中執行有時會崩潰,不是對所有的輸入,但有一些會崩潰,但是單步執行沒有問題。而在VS2012中調試也完全沒有問題,但是單獨執行那個.exe文件,同樣崩潰。附上圖片
總結
以上是生活随笔為你收集整理的基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言找最长串指针改错,全国计算机二级C
- 下一篇: c语言 求一个数的因数,【代码】求一个数