zoukankan      html  css  js  c++  java
  • 实现循环队列的各种基本运算

    实现循环队列的各种基本运算

    循环功能的实现

    参考书籍:63页 数据结构(C语言版). 严蔚敏等, 清华大学出版社, 2019.

    功能函数

    struct Sque{
    	int *base;
    	int front, rear;
    };
    bool init(Sque &Q); //初始化循环队列
    bool push(Sque &Q, int e); 
    bool pop(Sque &Q, int &e);
    bool isempty(Sque &Q);
    bool clear(Sque &Q);
    void initRandomize(int *arr, int n, int min, int max); //随机数生成函数
    

    代码实现

    #include<bits/stdc++.h>
    using namespace std;
    const int que_size=100;
    struct Sque{
    	int *base;
    	int front, rear;
    };
    bool init(Sque &Q)
    {
    	Q.base=(int*)malloc(que_size*sizeof(int));
    	if(Q.base==NULL)
    		return false;
    	Q.front=Q.rear=0;
    	return true;
    }
    bool push(Sque &Q, int e)
    {
    	if( (Q.rear+1)%que_size == Q.front) return false;
    	Q.base[Q.rear]=e;
    	Q.rear=(Q.rear+1)%que_size;
    	return true;	
    }
    bool pop(Sque &Q, int &e)
    {
    	if(Q.front==Q.rear)
    		return false;
    	e=Q.base[Q.front];
    	Q.front=(Q.front+1)%que_size;
    	return true;
    }
    bool isempty(Sque &Q)
    {
    	if(Q.rear==Q.front)
    		return true;
    	else return false; 
    }
    bool clear(Sque &Q)
    {
    	if(Q.base!=NULL)
    		free(Q.base);
    	Q.base=NULL;
    	Q.front=Q.rear=0;
    	return true;
    }
    /*
    	产生n个[min, max]的随机数。可能会有重复值。
    */
    void initRandomize(int *arr, int n, int min, int max)
    {
        int i = 0;
        srand(time(0));  			/*设置种子,并生成伪随机序列*/
        for (i = 0; i < n; ++i) {
            arr[i] = rand() % (max - min + 1) + min;  /*得到从[min, max]之间的随机数*/
            printf("%d ", arr[i]);
        }
        printf("
    
    ");
    }
    int main()
    {
    	int num[100];
    	Sque Q;
    	if(init(Q))
    		cout<<"循环队列初始化成功
    ";
    	else 
    		cout<<"循环队列初始化失败
    ";
    	cout<<"随机数如下:
    ";
    	initRandomize(num, 10, 0, 100);
    	for(int i=0; i<10; i++)
    	{
    		if( !push(Q, num[i]) )
    		{
    			cout<<"push出现问题,push操作停止
    ";
    			break;
    		}
    	} 
    	int e;
    	cout<<"下面将循环队列里面的内容全部出栈
    ";
    	while(!isempty(Q))
    	{
    		if(!pop(Q, e))
    		{
    			cout<<"pop出现问题,pop操作停止
    ";
    			break;
    		}
    		cout<<e<<" ";
    	} 
    	cout<<endl<<endl;
    	if(clear(Q))
    		cout<<"释放循环队列成功
    ";
    	else 
    		cout<<"释放循环队列失败
    ";
    	return 0;
    }
    
    欢迎评论交流!
  • 相关阅读:
    mysql在CentOS6.3上安装
    hdfs高可用性(HDFS High Availability)
    如何做个好员工
    lock(3)——更新锁(U)、排它锁(X)、死锁及如何避免死锁
    锁(1)—— 锁粒度和层次结构
    lock(2)——创建及更新表过程中SQL SERVER锁资源分配情况
    HBase体系结构
    HDFS的shell操作
    Windows 使用 net use 命令
    Windows 使用 net 命令简介
  • 原文地址:https://www.cnblogs.com/alking1001/p/11887175.html
Copyright © 2011-2022 走看看