日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99re视频这里只有精品 | 网红日批视频 | 日韩一区二区三区久久 | 欧美高清精品 | 中文字幕在线高清 | 91亚洲国产成人精品一区二区三 | 天天色av | 手机在线观看av网站 | 国产白浆在线 | 国产精品九九热 | 黄网在线观看免费 | 精品人妻一区二区三区四区久久 | 色婷亚洲| 翔田千里在线播放 | 日韩精品一区二区不卡 | 青草视频在线播放 | 精品无码久久久久久久久果冻 | 91精品国产高清一区二区三区蜜臀 | 探花视频在线版播放免费观看 | 中文字幕一区二区三区四区 | 嫩模被强到高潮呻吟不断 | 91精品视频免费在线观看 | 初高中福利视频网站 | 中文字幕va | 日本一卡二卡在线 | 好看的黄色网址 | 131mm少妇做爰视频 | 久久福利视频导航 | 久久精品视频无码 | 91亚洲国产精品 | 蜜臀久久99精品久久久 | 99视频在线观看视频 | 免费观看色 | 87福利视频| 国产成人aa | 香蕉视频在线看 | 久久久久性| 韩国精品一区 | 亚洲综合视频在线播放 | 伊人久久久久久久久久久 | 亚洲理论中文字幕 | 污污内射久久一区二区欧美日韩 | 亚洲视频中文字幕 | 美女福利片 | 锦绣未央在线观看 | 不卡中文字幕在线观看 | 懂色av中文一区二区三区天美 | 欧美在线播放一区 | 特级丰满少妇一级aaaa爱毛片 | 国产熟妇一区二区三区aⅴ网站 | 国产免费无码一区二区 | 91精品人妻一区二区三区四区 | 三级黄色片免费 | 日韩黄色免费观看 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 国产在线啪| 99国产精品久久久久久久久久久 | 日韩精品亚洲精品 | 高清不卡一区二区 | 男生女生搞鸡视频 | 人人上人人干 | 日韩精品在线第一页 | 狠狠老司机 | 性欧美精品中出 | 成人久久久 | 中国成人毛片 | 国产精品不卡一区二区三区 | 亚洲三级在线免费观看 | 天天舔天天摸 | 欧美日韩毛片 | 国产理论| www.国产.com| 欧美性做爰大片免费 | 夜夜爽日日澡人人添 | 日本毛片在线看 | 天堂资源| 51成人做爰www免费看网站 | 欧美精品xx | 国产黄色一级网站 | 波多野结衣丝袜 | 国产吞精囗交免费视频网站 | 日韩欧美黄色 | www.com毛片 | 欧美香蕉在线 | 波多野结衣欲乱上班族 | 欧美日韩一区二区三区视频 | 美女爽爽爽 | 在线免费视频一区二区 | 性欧美又大又长又硬 | 中文在线а√天堂官网 | 亚洲黄色一区 | 国产精品视频一区在线观看 | 黄网站免费大全入口 | 韩国三级在线 | 超碰视屏| 黄色小视频在线观看 | 黄色a级免费 | 日韩中文av在线 | 亚洲热在线视频 |