数据结构(C++) 栈-优先队列
来源:互联网 发布:工业控制软件系统 编辑:程序博客网 时间:2024/06/08 14:10
#include<stdio.h>#include<stdlib.h>#include<time.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -1#define INFEASIBLE -2typedef struct List { int data; struct List *next;}Queue,*SqQueue;typedef struct { SqQueue front; SqQueue rear;}LinkQueue;void Queue_Init(LinkQueue &Q){ Q.front=(SqQueue)malloc(sizeof(Queue));//申请空间并判断是否成功 if(!Q.front) exit(OVERFLOW); Q.rear=Q.front;//队头与队尾指向同一个空间 Q.front->data=0;//初始化队长 Q.rear->next=NULL;}//创建队列void Queue_Insert(LinkQueue &Q,int Data){ SqQueue node; node=(SqQueue)malloc(sizeof(Queue));//申请空间并判断是否成功 if(!node) exit(OVERFLOW); node->data=Data;//赋值 node->next=NULL; Q.rear->next=node; Q.rear=node; Q.front->data++;//插入队尾}//插入元素void Queue_Create(LinkQueue &Q){ int i,Data,length; srand(time(0)); printf("请输入队列长度:"); scanf("%d",&length);//输入长度 for(i=1;i<=length;i++) { Data=rand()%100;// scanf("%d",&Data); Queue_Insert(Q,Data);//插入元素 }}//尾插法创建队列int Queue_Delete(LinkQueue &Q,int &Data){ SqQueue node; if(!Q.front->next)//判断队列是否为空 return ERROR; node=Q.front->next; Q.front->next=node->next;//指针移位 Data=node->data; free(node);//删除队头 return OK;}//删除元素void Queue_Clear(LinkQueue &Q){ int State,Data; while(Q.front->next) State=Queue_Delete(Q,Data);//逐个删除元素 Q.front->data=0;}//清空队列void Queue_Destroy(LinkQueue &Q){ Queue_Clear(Q);//清空表 free(Q.front);//销毁队头指针}//销毁队列void Queue_Show(LinkQueue &Q){ SqQueue p=Q.front->next; while(p)//当p为空时终止循环 { printf("%0d ",p->data); p=p->next;//指针移位 } printf("\n");}//输出队列void Queue_Assign(LinkQueue &Q,int Pos,int Data){ SqQueue p=Q.front->next; int i=1; while(p&&i<Pos)//查找队中位置为pos的元素 { p=p->next;//指针移位 i++; } p->data=Data;}//按位置赋值int Queue_Getvalue(LinkQueue &Q,int Pos){ SqQueue p=Q.front->next; int i=1; while(p&&i<Pos)//查找队中位置为pos的元素 { p=p->next;//指针移位 i++; } return p->data;}//按位置取值void Queue_Exchange(LinkQueue &Q,int i,int j){ int Data_i,Data_j; Data_i=Queue_Getvalue(Q,i); Data_j=Queue_Getvalue(Q,j);//分别取值 Queue_Assign(Q,i,Data_j); Queue_Assign(Q,j,Data_i);//分别赋值}//交换元素void Queue_Adjustheap(LinkQueue &Q,int i,int N) { int L=2*i,R=2*i+1,Max=i; if (L<=N&&Queue_Getvalue(Q,L)>Queue_Getvalue(Q,Max)) Max=L; if (R<=N&&Queue_Getvalue(Q,R)>Queue_Getvalue(Q,Max)) Max=R;//找到最大的子数 if (Max!=i) { Queue_Exchange(Q,i,Max); //交换两者的值 Queue_Adjustheap(Q,Max,N);//递归调用 } }//调整堆void Queue_Buildheap(LinkQueue &Q,int N){ int i; for(i=N/2;i>=1;i--) Queue_Adjustheap(Q,i,N); //调用调整堆}//创建最堆void Queue_Sortheap(LinkQueue &Q,int N) { int i; Queue_Buildheap(Q,N);//创建最大堆 printf("创建最大堆:\n"); Queue_Show(Q); printf("\n"); for (i=N;i>=1;i--) { Queue_Exchange(Q,1,N);//交换堆顶与最后一个元素 printf("%02d:调整堆:",Q.front->data-i+1); Queue_Show(Q); N--; Queue_Adjustheap(Q,1,N);//调整堆 } }//堆排序int main(){ LinkQueue Q; Queue_Init(Q); Queue_Create(Q); printf("原始队列:\n"); Queue_Show(Q); Queue_Sortheap(Q,Q.front->data); return 0;}
阅读全文
0 0
- 数据结构(C++) 栈-优先队列
- 【数据结构】【C++STL】FIFO队列&优先队列
- 数据结构---->优先队列(堆)
- [数据结构].堆(优先队列)
- 数据结构 优先队列 C语言实现
- 优先队列(C++/Java)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 数据结构与算法(3)--优先队列
- 优先队列 - 数据结构 (二叉堆)
- 数据结构--优先队列(堆)的实现
- 【数据结构】回顾优先队列(堆)
- 数据结构——优先队列(堆)
- 《数据结构》C++代码 堆(优先队列)
- 数据结构之优先队列
- 数据结构_优先队列
- 数据结构_优先队列
- java输入字母转化为26进制的数字
- redhat软件的安装
- mac下安装maven
- hdu2056rectangles
- Java内存模式
- 数据结构(C++) 栈-优先队列
- linux nc命令相互发消息及传文件
- node搭建一个简易的静态资源服务器
- MQ消息队列的好处
- Maven分模块项目环境搭建
- Get新技能学习 android studio git-github
- 汽车车架号(VIN码)识别安卓IOS系统下的二次开发包
- J2EE中WEB-INF文件下内容的访问问题
- 南大Mooc计算机体系基础--重定位和动态链接