成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

c語言寫排序函數(shù)用鏈表,c語言順序表和鏈表

C語言鏈表如何排序

可以把鏈表設計成循環(huán)鏈表,用冒泡排序

成都創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站制作、成都網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元長洲做網(wǎng)站,已為上家服務,為長洲各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

在排序前設計一個交換標記,如在循環(huán)過程中有交換,則修改這個標記變量,如果在一次循環(huán)(當前節(jié)點為剛開始時節(jié)點,表示循環(huán)了一次)中,交換標記沒有被修改,則表明該數(shù)列已排好序。

現(xiàn)在給一個雙向循環(huán)鏈表的排序程序給你,該程序用了雙向冒泡排序(也就是雞尾酒排序法),希望對你有幫助

雙向鏈表我用的雞尾酒排序,也就是雙向冒泡排序

#includestdio.h

#define LEN sizeof(struct list)

struct list //雙向鏈表有兩個指針域,一個指向前節(jié)點,一個指向后繼節(jié)點

{struct list *lp; //lp為前節(jié)點指針,rp為后繼節(jié)點指針

int x;

struct list *rp;

};

int n;

struct list *creat(void)

{struct list *head;

struct list *p1,*p2; //兩個節(jié)點指針,p1是當前新建節(jié)點指針,p2為p1的前一個節(jié)點

n=0;

p1=p2=(struct list*)malloc(LEN); //申請內(nèi)存空間

scanf("%d",p1-x);

head=NULL; //先把頭指針設置為空

while(p1-x!=0)

{n=n+1;

if(n==1){p1-lp=NULL; head=p1;} //把head指向鏈表的第一個節(jié)點并把首節(jié)點的lp設為NULL

else

{p1-lp=p2; 新建了一個節(jié)點,把它的lp指向前一個節(jié)點p2

p2-rp=p1;} 把前節(jié)點的rp指針指向剛建立的節(jié)點

p2=p1; 進行迭代,p1變成下一個新節(jié)點的后繼節(jié)點

p1=(struct list*)malloc(LEN); //每次新建節(jié)點都要向系統(tǒng)申請內(nèi)存空間

scanf("%d",p1-x);

}

p2-rp=NULL; 把隨后的節(jié)點后繼指針設為空

return(head);

}

void print(struct list *head)

{struct list *p;

printf("\nNow,Thess %d records are :\n",n);

p=head;

if(head!=NULL)

do

{printf("%d ",p-x);

p=p-rp; //這個是個迭代過程,把p的后繼節(jié)點變成下一次要輸出的節(jié)點

}while(p!=NULL);

}

void sort(struct list *head) //排序用的雙向排序法,提高排序效率

{struct list *p,*bottom,*top;

int f,temp;

p=head;

if(head!=NULL)

{ f=1;

bottom=NULL; //bottom和top為數(shù)列左右冒泡的邊界節(jié)點

top=NULL;

while(f==1) //f為交換標記,如果沒交換則f沒變就推出循環(huán)

{f=0;

do

{

if(p-x (p-rp)-x)

{temp=p-x;

p-x=(p-rp)-x;

(p-rp)-x=temp;

f=1;

}

p=p-rp;

}while(p-rp!=top);

print(head);

top=p;

if((f==0)||(top==bottom))break;

f=0;

do

{

if(p-x(p-lp)-x)

{

temp=p-x;

p-x=(p-lp)-x;

(p-lp)-x=temp;

f=1;

}

p=p-lp;

}while(p-lp!=bottom);

bottom=p;

if(top==bottom)break;

print(head);

}

}

}

void main() //所有的函數(shù)都做成全局函數(shù),可以隨時調(diào)用

{struct list *head;

head=creat(); //建立鏈表

print(head); //輸出鏈表

sort(head); //排序

print(head); //輸出鏈表

system("PAUSE");

}

C語言如何對鏈表的數(shù)進行排序?

同學,給你一段代碼,里面涵蓋了鏈表的冒泡排序!

#includestdio.h

#includemalloc.h

typedef

struct

node

{

int

data;/*data代表成績分數(shù)*/

struct

node

*next;

}LNode,*LinkList;

LinkList

Creat(void)/*創(chuàng)建鏈表,結束標志為當輸入的數(shù)據(jù)為0!*/

{

LinkList

H,p1,p2;

int

n;

n=0;

p1=p2=(LinkList)malloc(sizeof(LNode));

printf("輸入數(shù)據(jù):");

scanf("%d",p1-data);

H=NULL;

while(p1-data!=0)

{

n=n+1;

if(n==1)

H=p1;

else

p2-next=p1;

p2=p1;

p1=(LinkList)malloc(sizeof(LNode));

scanf("%d",p1-data);

}

p2-next=NULL;

return(H);

}

LinkList

Sort(LinkList

SL)/*遞增排序函數(shù):入口參數(shù):鏈表的頭指針,此為鏈表中的排序函數(shù)*/

{

LinkList

p,q;

int

temp;

for(p=SL;p!=NULL;p=p-next)

{

for(q=p-next;q!=NULL;q=q-next)

{

if(p-dataq-data)

{

temp=q-data;

q-data=p-data;

p-data=temp;

}

}

}

return

SL;

}

int

main()

{

LinkList

L,S,K;

L=Creat();

printf("初始化的單鏈表數(shù)據(jù)序列為:\n");

for(S=L;S!=NULL;S=S-next)

printf("%d

",S-data);

Sort(L);

printf("\n按遞增順序排序后的序列為:\n");

for(K=L;K!=NULL;K=K-next)

printf("%d==",K-data);

return

0;

}

C語言的問題,只允許使用鏈表,排序函數(shù)應該怎么寫,求個大致的思路就行

鏈表也可以用冒泡排序之類的

void?sortList?(struct?lNode?*?L)?{

struct?lNode?*?p,q;?//鏈表結點指針

int?temp;?//鏈表結點數(shù)據(jù)域假設是int型

for?(p=L-next;?p!=NULL;?p=p-next)?//冒泡排序

for?(q=p-next;?q!=NULL;?q=q-next)

if?(p-data??q-data)?{

temp?=?q-data;

q-data?=?p-data;

p-data?=?temp;

}

}

C語言做鏈表的排序

#include"stdafx.h"

#include<stdlib.h>

//創(chuàng)建一個節(jié)點,data為value,指向NULL

Node*Create(intvalue){

Node*head=(Node*)malloc(sizeof(Node));

head->data=value;

head->next=NULL;

returnhead;

//銷毀鏈表

boolDestroy_List(Node*head){

Node*temp;

while(head){

temp=head->next;

free(head);

head=temp;

head=NULL;

returntrue;

//表后添加一個節(jié)點,Create(value)

boolAppend(Node*head,intvalue){

Node*n=Create(value);

Node*temp=head;

while(temp->next){

temp=temp->next;

temp->next=n;

return0;

//打印鏈表

voidPrint_List(Node*head){

Node*temp=head->next;

while(temp){

printf("%d->",temp->data);

temp=temp->next;

printf("\n");

//在鏈表的第locate個節(jié)點后(頭節(jié)點為0)插入創(chuàng)建的節(jié)點Create(value)

boolInsert_List(Node*head,intlocate,intvalue){

Node*temp=head;

Node*p;

Node*n=Create(value);

if(locate<0)

returnfalse;

while(locate--){

if(temp->next==NULL){

temp->next=Create(value);

returntrue;

temp=temp->next;

p=temp->next;

temp->next=n;

n->next=p;

returntrue;

//刪除第locate個節(jié)點后(頭節(jié)點為0)的節(jié)點

boolDelete_List(Node*head,intlocate){

Node*temp=head;

Node*p;

if(locate<0)

returnfalse;

while(locate--){

if(temp==NULL){

returnfalse;

temp=temp->next;

p=temp->next->next;

free(temp->next);

temp->next=NULL;

temp->next=p;

returntrue;

//獲取鏈表長度(不包括頭節(jié)點)

intSize_List(Node*head){

Node*temp=head;

intsize=0;

while(temp->next){

temp=temp->next;

size++;

returnsize;

//鏈表的三種排序(選擇,插入,冒泡)

boolSort_List(Node*head){

intt=0;

intsize=Size_List(head);

//選擇排序

/*for(Node*temp=head->next;temp?。絅ULL;temp=temp->next){

for(Node*p=temp;p!=NULL;p=p->next){

if(temp->data>p->data){

printf("換%d和%d\n",temp->data,p->data);

t=temp->data;

temp->data=p->data;

p->data=t;

}*/

//插入排序

/*for(Node*temp=head->next->next;temp!=NULL;temp=temp->next){

for(Node*p=head;p->next!=NULL;p=p->next){

if(p->next->data>temp->data)

printf("換%d和%d\n",temp->data,p->next->data);

t=temp->data;

temp->data=p->next->data;

p->next->data=t;

}*/

//冒泡排序

for(Node*temp=head->next;temp->next?。絅ULL;temp=temp->next){

for(Node*p=head->next;p->next?。絅ULL;p=p->next){

if(p->data>p->next->data){

t=p->data;

p->data=p->next->data;

p->next->data=t;

return0;

擴展資料:

return表示把程序流程從被調(diào)函數(shù)轉向主調(diào)函數(shù)并把表達式的值帶回主調(diào)函數(shù),實現(xiàn)函數(shù)值的返回,返回時可附帶一個返回值,由return后面的參數(shù)指定。

return通常是必要的,因為函數(shù)調(diào)用的時候計算結果通常是通過返回值帶出的。如果函數(shù)執(zhí)行不需要返回計算結果,也經(jīng)常需要返回一個狀態(tài)碼來表示函數(shù)執(zhí)行的順利與否(-1和0就是最常用的狀態(tài)碼),主調(diào)函數(shù)可以通過返回值判斷被調(diào)函數(shù)的執(zhí)行情況。

C語言 單向鏈表如何排序?

void link_order(STU *p_head)

{

STU *pb, *pf, temp;

pf = p_head;

if(p_head == NULL) {//鏈表為空

printf("needn't order.\n");

return ;

}

if(p_head-next == NULL) {//鏈表有1個節(jié)點

printf("only one print, needn't order.\n");

return ;

}

while(pf-next != NULL) {//以pf指向的節(jié)點為基準節(jié)點

pb = pf-next;//pb從基準點的下一個節(jié)點開始

while(pb != NULL) {

if(pf-num pb-num) {

temp = *pf;

*pf = *pb;

*pb = temp;

temp.next = pf-next;

pf-next = pb-next;

pb-next = temp.next;

}

pb = pb-next;

}

pf = pf-next;

}

return ;

}

擴展資料:

鏈表的排序有三種情況:

1、鏈表為空時:不用排序;

2、鏈表中有一個節(jié)點:不用排序;

3、鏈表中兩個及其以上節(jié)點時:排序。

return 0代表程序正常退出。return是C++預定義的語句,它提供了終止函數(shù)執(zhí)行的一種方式。當return語句提供了一個值時,這個值就成為函數(shù)的返回值。

return語句用來結束循環(huán),或返回一個函數(shù)的值。

1、return 0,說明程序正常退出,返回到主程序繼續(xù)往下執(zhí)行。

2、return 1,說明程序異常退出,返回主調(diào)函數(shù)來處理,繼續(xù)往下執(zhí)行。return 0或return 1對程序執(zhí)行的順序沒有影響,只是大家習慣于使用return(0)退出子程序而已。

文章標題:c語言寫排序函數(shù)用鏈表,c語言順序表和鏈表
網(wǎng)站地址:http://jinyejixie.com/article34/hojspe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站改版、用戶體驗品牌網(wǎng)站設計、關鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
松原市| 蕉岭县| 连城县| 甘谷县| 铜梁县| 夹江县| 夏邑县| 西乌| 巴彦淖尔市| 定南县| 普安县| 天祝| 怀柔区| 河间市| 依安县| 九台市| 怀柔区| 余江县| 云林县| 西林县| 商河县| 阿勒泰市| 宝清县| 永和县| 阿勒泰市| 林西县| 河源市| 巴林右旗| 温宿县| 澄迈县| 出国| 永州市| 英吉沙县| 南部县| 扎囊县| 光泽县| 大方县| 肃南| 大埔县| 泸溪县| 叙永县|