日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于链表的快速排序C语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...

發布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于链表的快速排序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语言,双向链表的快速排序算法,编译通过,程序会崩溃,求助一下各位...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。