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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二个例子:单链表实现基排序(桶排序)

發(fā)布時間:2025/4/16 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二个例子:单链表实现基排序(桶排序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

//單鏈表基排序(桶排序) //main.c #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include "List.h" #include<stdbool.h>void Create_barrel(List *L); void input_barrel(List *L,int val); int output_barrel(List *L);int main(void) {int data[]={64,8,216,512,27,729,0,1,343,125}; int JPX_num=0; //基排序進(jìn)行次數(shù) int j;int i;int WEI; //個十百位 int LEN; // 數(shù)組大小 int k;int Yushu; //余數(shù) int power=1; //10的倍數(shù) LEN=sizeof(data)/(sizeof(int)); //數(shù)組中數(shù)據(jù)個數(shù) bool Jiaoyan=1; //最大的位數(shù) List barrel_num[10]; //0-10的桶 while(Jiaoyan){Jiaoyan=0; for(j=0;j<LEN;j++){WEI=(data[j]/power)%10;Jiaoyan=Jiaoyan||WEI; //獲取數(shù)組里元素的最高位數(shù) }power*=10;JPX_num++;}JPX_num-=1;for(j=0;j<10;j++){Create_barrel(&barrel_num[j]); //為每個桶生成空鏈表,用于存儲之后數(shù)據(jù) }//排序power=1;for(j=0;j<JPX_num;j++){for(i=0;i<LEN;i++){Yushu=(data[i]/power)%10;input_barrel(&barrel_num[Yushu],data[i]); //把數(shù)依次入桶 }k=0;for(i=0;i<10;i++){while(!IsEmpty(barrel_num[i])){data[k]=output_barrel(&barrel_num[i]); //入完桶后依次出桶,已準(zhǔn)備下一次如同排序 k++;}}power*=10;} for(i=0;i<LEN;i++){printf("%d ",data[i]); //打印排序后的數(shù)組 } }void Create_barrel(List *L) {*L=(List)malloc(sizeof(struct Node)); //創(chuàng)建0-9共10個桶 (*L)->Next=NULL; }void input_barrel(List *L,int val) {InsertH(val,*L,*L); //入桶(相當(dāng)于單鏈表的后插) } int output_barrel(List *L) {List m;m=(*L)->Next;int a=m->Element; //出桶(相當(dāng)于單鏈表從第一個元素依次刪除) (*L)->Next=(*L)->Next->Next;free(m);return a; } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //List.h #ifndef _LIST_H_ typedef int ElementType;struct Node;typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position;struct Node {ElementType Element;Position Next; };void CreateList(List *L,int n); void PrintList(List L);List MakeEmpty(List L); int IsEmpty(List L); void CreateEmptyList(List *L); int IsLast(Position P,List L); Position Find(ElementType X,List L); void Delete(ElementType X,List L); Position FindPrevious(ElementType X,List L); void Insert(ElementType X,List L,Position P); void InsertH(ElementType X,List L,Position P); void DeleteList(List L); Position Header(List L); Position First(List L); Position Advance(Position P); ElementType Retrieve(Position P);#endif %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //List.c #include "List.h" #include<stdio.h> #include<stdlib.h> #include<malloc.h>/*struct Node {ElementType Element;Position Next; };*/void CreateList(List *L,int n) {Position P,P1;int i;*L=(Position)malloc(sizeof(struct Node));(*L)->Next=NULL;P1=*L;printf("請輸入%d個數(shù)據(jù):\n",n); //沒問題 for(i=n;i>0;i--){//P=(Position)malloc(sizeof(struct Node));//scanf("%d",&P->Element); //前插 //P->Next=(*L)->Next;//(*L)->Next=P;P=(Position)malloc(sizeof(struct Node));scanf("%d",&P->Element);P->Next=P1->Next; //后插 P1->Next=P;P1=P;} }void PrintList(List L) {printf("已保存鏈表\n");Position P;P=L->Next;while(P->Next!=NULL){printf("%d ",P->Element); //沒問題 P=P->Next;}printf("%d ",P->Element); }void FatalError(char a[]) {printf("%s",a); //沒問題 }int IsEmpty(List L) {return L->Next==NULL; //沒問題 }int IsLast(Position P,List L) {return P->Next==NULL; }List MakeEmpty(List L) {List q,p;p=L->Next;while(p!=NULL){ //沒問題 q=p->Next;free(p);p=q;}L->Next=NULL;return L; }Position Find(ElementType X,List L) {Position P;P=L->Next;while((P->Next!=NULL)&&(P->Element!=X)) //沒問題 {P=P->Next;}return P; }Position findPrevious(ElementType X,List L) {Position P;P=L;while((P->Next!=NULL)&&(P->Next->Element!=X)) //沒問題 {P=P->Next;}return P; }void Delete(ElementType X,List L) {Position P,TmpCell;P=findPrevious(X,L);if(!IsLast(P,L)){TmpCell=P->Next;P->Next=TmpCell->Next; //沒問題 free(TmpCell);} } void DeleteList(List L) {Position P,Q;P=L->Next;L->Next=NULL;while(P!=NULL){Q=P->Next; //沒問題 free(P);P=Q;} } void Insert(ElementType X,List L,Position P) {if(L==NULL){return;} Position TmpCell;TmpCell=malloc(sizeof(struct Node));if(TmpCell!=NULL){TmpCell->Next=P->Next; //前插,沒問題 TmpCell->Element=X;P->Next=TmpCell;}else{FatalError("out of space!!!");} } void InsertH(ElementType X,List L,Position P) {if(L==NULL){return;} Position TmpCell;List q;TmpCell=malloc(sizeof(struct Node));q=L; //后插,沒問題 while(q->Next!=NULL){q=q->Next;}q->Next=TmpCell;TmpCell->Next=NULL;TmpCell->Element=X; } void CreateEmptyList(List *L) {*L=(Position)malloc(sizeof(struct Node));(*L)->Next=NULL; }

//List.h
#ifndef _LIST_H_
typedef int ElementType;

struct Node;

typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

struct Node
{
?? ?ElementType Element;
?? ?Position Next;
};

void CreateList(List *L,int n);
void PrintList(List L);

List MakeEmpty(List L);
int IsEmpty(List L);
void CreateEmptyList(List *L);
int IsLast(Position P,List L);
Position Find(ElementType X,List L);
void Delete(ElementType X,List L);
Position FindPrevious(ElementType X,List L);
void Insert(ElementType X,List L,Position P);
void InsertH(ElementType X,List L,Position P);
void DeleteList(List L);
Position Header(List L);
Position First(List L);
Position Advance(Position P);
ElementType Retrieve(Position P);

#endif


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

//List.c
#include "List.h"
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

/*struct Node
{
?? ?ElementType Element;
?? ?Position Next;
};*/

void CreateList(List *L,int n)
{
?? ?Position P,P1;
?? ?int i;
?? ?*L=(Position)malloc(sizeof(struct Node));
?? ?(*L)->Next=NULL;
?? ?P1=*L;
?? ?printf("請輸入%d個數(shù)據(jù):\n",n); ? ? ? ? ? ? ? ? ? ?//沒問題?
?? ?for(i=n;i>0;i--)
?? ?{
?? ??? ?//P=(Position)malloc(sizeof(struct Node));
?? ? ? ?//scanf("%d",&P->Element); ? ? ? ? ? ? ? ?//前插?
?? ? ? ?//P->Next=(*L)->Next;
?? ? ? ?//(*L)->Next=P;
?? ??? ?
?? ??? ?P=(Position)malloc(sizeof(struct Node));
?? ??? ?scanf("%d",&P->Element);
?? ??? ?P->Next=P1->Next; ? ? ? ? ? ? ? ? ? ? ? //后插?
?? ??? ?P1->Next=P;
?? ??? ?P1=P;
?? ?
?? ?}
}

void PrintList(List L)
{
?? ?printf("已保存鏈表\n");
?? ?Position P;
?? ?P=L->Next;
?? ?while(P->Next!=NULL)
?? ?{
?? ??? ?printf("%d ",P->Element); ? ? ? ? ? ? ?//沒問題?
?? ??? ?P=P->Next;
?? ?}
?? ?printf("%d ",P->Element);
}

void FatalError(char a[])
{
?? ?printf("%s",a); ? ? ? ? ? ? ? ? ? ? ? ? ? //沒問題?
}

int IsEmpty(List L)
{
?? ?return L->Next==NULL; ? ? ? ? ? ? ? ? ? ? //沒問題?
}

int IsLast(Position P,List L)
{
?? ?return P->Next==NULL;?
}

List MakeEmpty(List L)
{
?? ?List q,p;
?? ?p=L->Next;
?? ?while(p!=NULL)
?? ?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//沒問題?
?? ??? ?q=p->Next;
?? ??? ?free(p);
?? ??? ?p=q;
?? ??? ?
?? ?}
?? ?L->Next=NULL;
?? ?
?? ?return L;
}

Position Find(ElementType X,List L)
{
?? ?Position P;
?? ?P=L->Next;
?? ?while((P->Next!=NULL)&&(P->Element!=X)) ? ? ? ?//沒問題?
?? ?{
?? ??? ?P=P->Next;
?? ?}
?? ?
?? ?return P;
}

Position findPrevious(ElementType X,List L)
{
?? ?Position P;
?? ?P=L;
?? ?while((P->Next!=NULL)&&(P->Next->Element!=X)) ? ?//沒問題?
?? ?{
?? ??? ?P=P->Next;
?? ?}
?? ?
?? ?return P;
}

void Delete(ElementType X,List L)
{
?? ?Position P,TmpCell;
?? ?P=findPrevious(X,L);
?? ?if(!IsLast(P,L))
?? ?{
?? ??? ?TmpCell=P->Next;
?? ??? ?P->Next=TmpCell->Next; ? ? ? ? ? ? ? ? ? //沒問題?
?? ??? ?free(TmpCell);
?? ?}
}
void DeleteList(List L)
{
?? ?Position P,Q;
?? ?P=L->Next;
?? ?L->Next=NULL;
?? ?while(P!=NULL)
?? ?{
?? ??? ?Q=P->Next; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //沒問題?
?? ??? ?free(P);
?? ??? ?P=Q;
?? ?}
}
void Insert(ElementType X,List L,Position P)
{
?? ?if(L==NULL)
?? ?{
?? ??? ?return;
?? ?}?
?? ?Position TmpCell;
?? ?TmpCell=malloc(sizeof(struct Node));
?? ?if(TmpCell!=NULL)
?? ?{
?? ??? ?TmpCell->Next=P->Next; ? ? ? ? ? ? ? ? ? //前插,沒問題?
?? ??? ?TmpCell->Element=X;
?? ??? ?P->Next=TmpCell;
?? ?}
?? ?else
?? ?{
?? ??? ?FatalError("out of space!!!");
?? ?}?
}
void InsertH(ElementType X,List L,Position P)
{
?? ?if(L==NULL)
?? ?{
?? ??? ?return;
?? ?}?
?? ?Position TmpCell;
?? ?List q;
?? ?TmpCell=malloc(sizeof(struct Node));
?? ?q=L; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//后插,沒問題?
?? ?while(q->Next!=NULL)
?? ?{
?? ??? ?q=q->Next;
?? ?}
?? ?q->Next=TmpCell;
?? ?TmpCell->Next=NULL;
?? ?TmpCell->Element=X;
}
void CreateEmptyList(List *L)
{
?? ?*L=(Position)malloc(sizeof(struct Node));
?? ?(*L)->Next=NULL;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

//單鏈表基排序(桶排序)?
//main.c
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include "List.h"
#include<stdbool.h>

void Create_barrel(List *L);
void input_barrel(List *L,int val);
int output_barrel(List *L);

int main(void)
{
?? ?int data[]={64,8,216,512,27,729,0,1,343,125};?
?? ?int JPX_num=0; ? ?//基排序進(jìn)行次數(shù) ? ? ? ? ? ? ?
?? ?int j;
?? ?int i;
?? ?int WEI; ? ?//個十百位?
?? ?int LEN; ? ? ? ?// 數(shù)組大小?
?? ?int k;
?? ?int Yushu; ? ? //余數(shù)?
?? ?int power=1; ? //10的倍數(shù)?
?? ?LEN=sizeof(data)/(sizeof(int)); ? ? ? //數(shù)組中數(shù)據(jù)個數(shù)?
?? ?bool Jiaoyan=1; ? ? ?//最大的位數(shù)?
?? ?List barrel_num[10]; ? ? //0-10的桶?
?? ? ? ? ? ? ??
?? ?while(Jiaoyan)
?? ?{
?? ??? ?Jiaoyan=0;?
?? ??? ?for(j=0;j<LEN;j++)
?? ??? ?{
?? ??? ??? ?WEI=(data[j]/power)%10;
?? ??? ??? ?Jiaoyan=Jiaoyan||WEI; ? ? ? ? ? ? ? ? ? ? //獲取數(shù)組里元素的最高位數(shù)?
?? ??? ?}
?? ??? ?power*=10;
?? ??? ?JPX_num++;
?? ?}
?? ?JPX_num-=1;
?? ??
?? ?for(j=0;j<10;j++)
?? ?{
?? ??? ?Create_barrel(&barrel_num[j]); ? ? ? ? ? ? ? ? //為每個桶生成空鏈表,用于存儲之后數(shù)據(jù)?
?? ?}
?? ?//排序
?? ?power=1;
?? ?for(j=0;j<JPX_num;j++)
?? ?{
?? ??? ?for(i=0;i<LEN;i++)
?? ??? ?{
?? ??? ??? ?Yushu=(data[i]/power)%10;
?? ??? ??? ?input_barrel(&barrel_num[Yushu],data[i]); ? ? ? ? ? ?//把數(shù)依次入桶?
?? ??? ?}
?? ??? ?k=0;
?? ??? ?for(i=0;i<10;i++)
?? ??? ?{
?? ??? ??? ?while(!IsEmpty(barrel_num[i]))
?? ??? ??? ?{
?? ??? ??? ??? ?data[k]=output_barrel(&barrel_num[i]); ? ? ? ? ?//入完桶后依次出桶,已準(zhǔn)備下一次如同排序?
?? ??? ??? ??? ?k++;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?power*=10;
?? ?}?
?? ?
?? ?for(i=0;i<LEN;i++)
?? ?{
?? ??? ?printf("%d ",data[i]); ? ? ? ? ? ? ? ? ? ? ?//打印排序后的數(shù)組?
?? ?}
}

void Create_barrel(List *L)
{
?? ?*L=(List)malloc(sizeof(struct Node)); ? ? ?//創(chuàng)建0-9共10個桶?
?? ?(*L)->Next=NULL;
}

void input_barrel(List *L,int val)
{
?? ?InsertH(val,*L,*L); ? ? ? ? ? ? ? ? ? ?//入桶(相當(dāng)于單鏈表的后插)?
}?
int output_barrel(List *L)
{
?? ?List m;
?? ?m=(*L)->Next;
?? ?int a=m->Element; ? ? ? ? ? ? ? ? ? ? ?//出桶(相當(dāng)于單鏈表從第一個元素依次刪除)?
?? ?(*L)->Next=(*L)->Next->Next;
?? ?free(m);
?? ?return a;
}
?

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

輸入數(shù)組:int data[]={64,8,216,512,27,729,0,1,343,125};?

排序結(jié)果:0 1 8 27 64 125 216 343 512 729
--------------------------------
Process exited after 0.03693 seconds with return value 10
請按任意鍵繼續(xù). . .

轉(zhuǎn)載于:https://my.oschina.net/u/3397950/blog/872539

總結(jié)

以上是生活随笔為你收集整理的第二个例子:单链表实现基排序(桶排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 不卡av免费在线观看 | 欧美成人看片黄a免费看 | 日韩中文免费 | 中文字幕综合 | 日本一级黄色 | 依人久久 | 欧产日产国产精品 | 日韩激情床戏 | 日韩在线免费视频观看 | 国产真人做爰毛片视频直播 | 亚洲成人va| 精品国产污污免费网站入口 | 五月av在线 | 成年女人免费视频 | 丝袜 中出 制服 人妻 美腿 | 色 综合 欧美 亚洲 国产 | 久色91| 在线观看日韩 | 国产成人精品av在线观 | 日本学生初尝黑人巨免费视频 | 中文字幕av在线免费 | 国产麻豆一级片 | 毛片在线免费 | 亚洲人成无码www久久久 | 韩日成人 | 日韩欧美精品一区二区 | 蜜臀99久久精品久久久久小说 | 人人超碰97| 揉我啊嗯~喷水了h视频 | 6080亚洲精品一区二区 | 欧美区在线 | 国产麻豆免费观看 | 大学生三级中国dvd 日韩欧美一区二区区 | 久久性色av | av黄色成人| av中文字幕免费在线观看 | 可以直接观看的av | 一级在线免费观看 | 在线午夜 | 农村少妇无套内谢粗又长 | 青草一区| 日本精品在线播放 | 九九热精品视频在线 | 一级女性全黄久久生活片免费 | 少妇激情四射 | 欧美一区三区三区高中清蜜桃 | 欧美精产国品一二三区 | 日韩激情国产 | 久久久男人的天堂 | 日韩激情综合 | 清冷男神被c的合不拢腿男男 | 欧美黄色免费看 | 一区二区免费播放 | 欧美一区二区在线播放 | 伊人久久久久久久久久久久 | 精品白浆| www色中色 | 在线观看福利网站 | 午夜在线播放视频 | 国产精品老熟女一区二区 | 国产精品扒开腿做爽爽爽男男 | 国产剧情久久久 | 国产成人资源 | 简单av在线| 秋霞网一区二区三区 | h网站在线播放 | 亚洲成人黄色在线观看 | 欧美日韩一区二区久久 | 国产叼嘿视频 | 人人亚洲 | 国产乱子伦精品无码码专区 | 丁香花电影在线观看免费高清 | 亚洲综合欧美综合 | 久久中文字 | 五月天六月色 | 久久久久久蜜桃一区二区 | 国产黄色美女视频 | 大奶子情人 | 国产后入又长又硬 | 91精品91久久久中77777老牛 | 欧美一区二区三区视频 | 色呦呦在线看 | 欧美激情另类 | 日本xxxx人| 五月天色婷婷综合 | 在线观看xxxx | 色小说综合 | 91视频xxx | 欧美激情3p| 亚洲精品一二三四区 | 欧美丝袜视频 | 明日叶三叶 | 实拍澡堂美女洗澡av | 韩国伦理在线视频 | 小少妇哺乳喂奶播放 | 四虎网站最新网址 | 24小时日本在线www免费的 | 免费午夜人成电影 | 国产一区二区三区四区hd |