【Data_Structure笔记7】排序算法之【链式基数排序】
来源:互联网 发布:神界原罪2低配优化 编辑:程序博客网 时间:2024/06/06 22:45
/******************************************************************************************************************文件说明: 采用单链表实现的【链式基数排序】*******************************************************************************************************************/#include<iostream>using namespace std;/*******************************************************************************************************************模块说明: 定义单链表的【结点】数据结构********************************************************************************************************************/typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;/*******************************************************************************************************************模块说明: 初始化单链表,将单链表初始化为一个空表********************************************************************************************************************/void InitList(LinkList& pHead){pHead = (LinkList)std::malloc(sizeof(LNode)); //【1】创建头结点pHead->next = NULL; //【2】将单链表初始化为空表}/*******************************************************************************************************************模块说明: 单链表的插入操作********************************************************************************************************************/void ListInsert(LinkList& pHead,int x){if(pHead==NULL){std::cout<<"【NOTICE】此单链表尚没有初始化,请先初始化单链表!"<<std::endl;std::system("pause");std::exit(1);}else{LNode* pTail = NULL;LNode* pInsertData = NULL;pTail = pHead; //【1】pTail始终指向表尾的结点pInsertData = (LNode*)std::malloc(sizeof(LNode));pInsertData->data = x;pInsertData->next = NULL;while (pTail->next!=NULL){pTail = pTail->next;}pTail->next = pInsertData;}}/*******************************************************************************************************************模块说明: 获得单链表中的第一个结点********************************************************************************************************************/LNode* GetFirstLNode(LinkList pHead){if(pHead->next==NULL){std::cout<<"【NOTICE】单链表为空表,获取第一个结点失败!"<<std::endl;std::system("pause");std::exit(0);}else{LNode* pTemp = NULL;pTemp = pHead->next;pHead->next = pTemp->next;return pTemp;}}/*******************************************************************************************************************模块说明: 在单链表中追加一个结点********************************************************************************************************************/void AppendLNode(LinkList& pHead,LNode* insertLNode){if(pHead==NULL){std::cout<<"【NOTICE】此单链表尚没有初始化,请先初始化单链表!"<<std::endl;std::system("pause");std::exit(1);}else{LNode* pTemp = NULL;pTemp = pHead;while(pTemp->next!=NULL){pTemp = pTemp->next;}pTemp->next = insertLNode;insertLNode->next = NULL;}}/*******************************************************************************************************************模块说明: 将所有的子链表链接成一个大的链表********************************************************************************************************************/void Total(LinkList& pHead,LinkList pSubHead){LNode* pTemp = NULL;pTemp = pHead;while (pTemp->next!=NULL){pTemp = pTemp->next;}pTemp->next = pSubHead->next;}/*******************************************************************************************************************模块说明:********************************************************************************************************************/int Power(int a,int n){int y;if(n==0)return 1;else{y=Power(a,n/2);y=y*y;if(n%2==1)y=y*a;}return y;}/*******************************************************************************************************************模块说明:********************************************************************************************************************/int GetNum(LNode *p,int i){int data=p->data;int a;i--;a=data/Power(10,i);return a%10;}/*******************************************************************************************************************模块说明: 链式基数排序的核心模块参数说明: [1]LinkList pHead[2]int iCount--------表示参加排序的整数的最大位数一共有iCount位数字********************************************************************************************************************/void RadixSort(LinkList& pHead,int iCount){LinkList pSubHead[10]; //【1】定义10个子链表的头结点LNode* qTempLNode = NULL;int k = 0;int j = 0;int i = 0;for(j=1;j<=iCount;j++){for(i=0;i<10;i++){InitList(pSubHead[i]);}//for iwhile (pHead->next!=NULL) //【2】链表从头到尾扫描,并将扫描到的结点脱离链表{qTempLNode = GetFirstLNode(pHead); //【3】获得链表上的一个结点k = GetNum(qTempLNode,j); //【4】取得链表结点第j位的元素值kAppendLNode(pSubHead[k],qTempLNode); //【5】将该结点链接到10个子链表相应的位置}for(i=0;i<10;i++) //【6】将10个子链表从0~9依次连接到pHead结点的后面{Total(pHead,pSubHead[i]);}}//for jfor(i=0;i<10;i++){delete(pSubHead[i]);}}/*******************************************************************************************************************模块说明: 遍历单链表,输出单链表中结点的数据********************************************************************************************************************/void PrintLinkList(LinkList pHead){LNode* pTemp = NULL;pTemp = pHead->next;while(pTemp!=NULL){std::cout<<pTemp->data<<std::endl;pTemp = pTemp->next;}}void main(){LinkList pHead = NULL;InitList(pHead);ListInsert(pHead,100);ListInsert(pHead,10);ListInsert(pHead,90);ListInsert(pHead,80);ListInsert(pHead,70);ListInsert(pHead,60);ListInsert(pHead,50);ListInsert(pHead,40);ListInsert(pHead,30);ListInsert(pHead,20);RadixSort(pHead,4); //表示参加排序的整数最大位数一共有4位数字PrintLinkList(pHead);system("pause");}
阅读全文
0 0
- 【Data_Structure笔记7】排序算法之【链式基数排序】
- 【Data_Structure笔记8】排序算法之【选择排序---堆排序】
- 【Data_Structure笔记4】排序算法之【交换类排序】
- 【Data_Structure笔记5】排序算法之【选择类排序】
- 【Data_Structure笔记6】排序算法之【二路归并排序】
- 【Data_Structure笔记14】【笔试】之【所有排序算法】
- 【Data_Structure笔记3】排序算法之插入排序常见的三种算法
- 【Data_Structure笔记11】查找算法之【二叉排序树】
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 【排序算法】之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- 排序算法之基数排序
- CentOS 6.5_x64安装Oracle 11g R2
- Java多线程基础
- C++ Streams
- mysql导入大量数据时报MySQL server has gone away错误的解决办法
- ArrayList源码学习
- 【Data_Structure笔记7】排序算法之【链式基数排序】
- SpringBoot01
- postgresql基础配置
- string,stringbuffer,stringbuilder的区别
- LinkedList源码学习
- java总结输入流输出流
- Python 导包
- SpringMVC的简洁配置步骤
- 【头文件】STM32F1系列单片机USB外设相关寄存器的定义(USB_TypeDef)