数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
//实现英文单词按字典序排序的基数排序算法#include<stdio.h>
#include<malloc.h>
#include<string.h>#define MaxLen 9 //单词的最大长度
#define Radix 27//基数Radix为27,分别对应'','a',....'z'typedef char String[MaxLen+1];//定义String为字符数组类型typedef struct node
{String word;struct node *next;
}LinkNode;void DispWord(String r[],int n)//输出单词
{int i;printf(" ");for(i=0;i<n;i++)printf("[%s]",r[i]);printf("\n");
}void PreProcess(String r[],int n)
{//对单词进行预处理,用空格填充尾部至MaxLen长int i,j;for(i=0;i<n;i++){if(strlen(r[i])<MaxLen){for(j=strlen(r[i]);j<MaxLen;j++)r[i][j]=' ';r[i][j]='\0';}}
}void EndProcess(String r[],int n)
{//恢复处理,删除预处理时填充的尾部空格int i,j;for(i=0;i<n;i++){for(j=MaxLen-1;r[i][j]==' ';j--);r[i][j+1]='\0';}
}void Distribute(String r[],LinkNode *head[],LinkNode *tail[],int j,int n)
{//按关键字的第j个分量进行分配,进入此过程时各队列一定为空int i,k;LinkNode *p;for(i=0;i<n;i++)//一次扫描r[i],将其入队{if(r[i][j]=' ')//空格时放入0号队列中,'a'时放入1号队列中,...k=0;elsek=r[i][j]-'a'+1;p=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点strcpy(p->word,r[i]);p->next=NULL;if(head[k]==NULL){head[k]=p;tail[k]=p;}else{tail[k]->next=p;tail[k]=p;}}
}void Collect(String r[],LinkNode *head[])
{//一次将各非空队列中的记录收集起来 int k=0,i;LinkNode *p;for(i=0;i<Radix;i++)for(p=head[i];p!=NULL;p=p->next)strcpy(r[k++],p->word);
}void RadixSort(String r[],int n)
{//对r[0...n-1]进行基数排序LinkNode *head[Radix],*tail[Radix];//定义Radix个队列int i,j;for(i=MaxLen-1;i>=0;i--)//从低位到高位排序{for(j=0;j<Radix;j++)head[j]=tail[j]=NULL;//队列置空Distribute(r,head,tail,i,n);//第i趟分配Collect(r,head);//第i趟收集}
}int main()
{int n=6;String r[]={"while","if","if-else","do-while","for","case"}; printf("排序前:\n"); DispWord(r,n);PreProcess(r,n);printf("预处理后:\n"); DispWord(r,n);RadixSort(r,n);printf("排序结果:\n"); DispWord(r,n);EndProcess(r,n);printf("最终结果:\n"); DispWord(r,n); return 0;
}
数据结构源码笔记(C语言描述)汇总:
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
数据结构源码笔记(C语言):直接插入排序
数据结构源码笔记(C语言):直接选择排序
数据结构源码笔记(C语言):置换-选择算法
数据结构源码笔记(C语言):Huffman树字符编码
数据结构源码笔记(C语言):Josephus问题之顺序表
数据结构源码笔记(C语言):Josephus问题之循环链接表
数据结构源码笔记(C语言):多项式合并
数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁
数据结构源码笔记(C语言):哈夫曼树
数据结构源码笔记(C语言):集合的位向量表示
数据结构源码笔记(C语言):链接队列
数据结构源码笔记(C语言):链接栈
数据结构源码笔记(C语言):线性表的单链表示
数据结构源码笔记(C语言):线性表的顺序表示
数据结构源码笔记(C语言):栈的基本操作
数据结构源码笔记(C语言):中缀表达式
数据结构源码笔记(C语言):希尔插入排序
数据结构源码笔记(C语言):索引文件建立和查找
数据结构源码笔记(C语言):冒泡排序
数据结构源码笔记(C语言):快速排序
数据结构源码笔记(C语言):可变长度字符串的快速排序
数据结构源码笔记(C语言):基数排序
数据结构源码笔记(C语言):二路归并排序
数据结构源码笔记(C语言):堆排序
数据结构源码笔记(C语言):二叉树搜索树Kruskal
数据结构源码笔记(C语言):二叉搜索树Prim
数据结构源码笔记(C语言):最短路径弗洛伊德算法
数据结构源码笔记(C语言):深度、广度优先生成树
数据结构源码笔记(C语言):邻接矩阵转化邻接表
数据结构源码笔记(C语言):统计字符串中出现的字符及其次数
数据结构源码笔记(C语言):顺序查找
数据结构源码笔记(C语言):哈希表的相关运算算法
数据结构源码笔记(C语言):分块法查找
数据结构源码笔记(C语言):二分查找
数据结构源码笔记(C语言):二叉树遍历
数据结构源码笔记(C语言):二叉平衡树的相关操作算法
数据结构源码笔记(C语言):二叉排序树的基本操作算法
数据结构源码笔记(C语言):B树的相关运算算法
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序相关推荐
- 数据结构源码笔记(C语言描述)汇总
数据结构源码笔记(C语言):英文单词按字典序排序的基数排序 数据结构源码笔记(C语言):直接插入排序 数据结构源码笔记(C语言):直接选择排序 数据结构源码笔记(C语言):置换-选择算法 数据结构源码 ...
- 数据结构源码笔记(C语言):索引文件建立和查找
//实现索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include< ...
- 数据结构源码笔记(C语言):快速排序
//实现快速排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):冒泡排序
//冒泡排序算法实现 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; type ...
- 数据结构源码笔记(C语言):希尔插入排序
//实现希尔插入排序算法 #include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; ty ...
- 数据结构源码笔记(C语言):直接插入排序
//实现直接插入排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):直接选择排序
//实现直接选择排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20typedef int KeyType; typ ...
- 数据结构源码笔记(C语言):置换-选择算法
//实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...
- 数据结构源码笔记(C语言):Huffman树字符编码
#include <stdio.h> #include<string.h> #define N 10 /*待编码字符的个数,即树中叶结点的最大个数*/ #define M 2* ...
最新文章
- JQuery3 的新变化
- Linux运维基础(硬件和操作系统)
- Mac 技术篇-多个python版本环境下Geany编辑器指定python版本运行
- 问题 E: 括号规则
- C++ 构建最小堆、最大堆
- 面试官留步!听我跟你侃会儿Docker原理
- springboot 获取bean_3W 字的 Spring Boot 超详细总结
- 复制网页上无法选中的文字
- 《统计学习方法》—— 聚类方法(层次聚类和K均值聚类)
- System Center Data Protection Manager 2007之一安装
- 计算机科学导论:第六章 计算机网络和因特网
- Hou的图像显著性计算模型
- 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
- 3、基于竞速小车 实现 华为hi lens红绿灯识别操作
- 一、HTML、HTTP、web综合问题
- 鼠标dpi设置多少合适呢?查看鼠标dpi的方法
- 头歌平台(EduCoder)—— Matplotlib图形配置
- cocos2d-x的面试题
- linux操作系统面试题及答案
- 达梦数据库导入导出操作步骤
热门文章
- gdb加载python_gdb加载python脚本的方法
- mysql递归查询所有上下节点_【转】MySQL之Spider存储引擎原理详解
- Win2003 安全设置大全
- Linux下的top命令
- 【音乐App】—— Vue-music 项目学习笔记:播放器内置组件开发(一)
- 代写SOFTENG 370 Operating Systems课设、代做C/C++ 留学生作业、代写c/c++代码、代写C/C++编程作业...
- UWP入门(二) -- 基础笔记
- mongodb中批量将时间戳转变通用日期格式
- Redis的系统级命令
- linux删除非空目录