首页 > 代码库 > 基数排序之多keyword排序运用队列

基数排序之多keyword排序运用队列

源码例如以下:

#include <stdlib.h>
#include <stdio.h>

typedef struct QUEUEnode* link;
struct QUEUEnode{
	int item ;
	link next;
	link head , tail;
};

link NEW(int item, link next){
	link x = (link) malloc(sizeof *x);
	x->item = item;
	x->next = next;
	return x;
}

void QUEUEinit(link queue, int maxN){
	queue->head = NULL;
}

int QUEUEempty(link queue){
	return queue->head == NULL;
} 

void  QUEUEput(link queue,int item){
	if(queue->head == NULL){
		queue->head =(queue->tail = NEW(item,queue->head)) ;
		return;
	}
	queue->tail->next = NEW(item,queue->tail->next);
	queue->tail = queue->tail->next;
}

int QUEUEget(link queue){
	int item = queue->head->item;
	link t = queue->head->next;
	free(queue->head);
	queue->head = t;
	return item;
} 
//以上是QUEUE的ADT
//求整数k的第p位 
int radix(int k, int p){
	int i,power = 1 ;
	 for(i=1;i<=p-1;i++) power*=10;
	 return (k%(power*10))/power;
}

void p(link A){
	while(!QUEUEempty(A))
		printf("%d ",QUEUEget(A));
}
void radixSort(int figure, link A){  //figure:待排序的数据最大位数  此方法仅仅适合数字排序
	link Q[10]; int data, pass, i , r;
	for(pass=1;pass<=figure;pass++){
		for(i=0;i<=9;i++){
			Q[i] = (link)malloc(sizeof *(Q[i]));
			QUEUEinit(Q[i],40); //置空队列 
		}
		while(!QUEUEempty(A)){ 
			data = http://www.mamicode.com/QUEUEget(A);>

基数排序之多keyword排序运用队列