zoukankan      html  css  js  c++  java
  • 关于栈和队列的三个题目

    1. 用两个栈实现一个队列的功能(C++实现)

    思路:

    第一步,入队:用一个栈的push操作实现,将入队值压入一个栈中(栈一)

    第二步,出队:在另一个栈中进行出栈操作(栈二):若栈二非空,直接从栈二中pop出即可

                        若栈二为空,则将栈一中的所有元素pop出来,一次push进栈二中,然后从栈二中pop出元素。

                        注:只有当stack2 为空时,才会从stack1中pop出元素push进stack2中。

    C++代码如下:

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    template<class T>
    struct MyQueue
    {
        void push(T &t)
        {
            s1.push(t);
    
        }
        T front()
        {
            if(s2.empty())
            {
                if(s1.size() == 0 ) throw;
                while(!s1.empty())
                {
                    s2.push(s1.top());
                    s1.pop();
                }
            }
            return s2.top();
        }
        void pop()
        {
            if(s2.empty())
            {
                while(!s1.empty())
                {
                    s2.push(s1.top());
                    s1.pop();
                }
            }
            if(!s2.empty())
            s2.pop();
    
        }
        stack<T> s1;
        stack<T> s2;
    };
    
    int main()
    {
        MyQueue<int> mq;
        int i;
        for(i=0 ;i<10; ++i)
        {
            mq.push(i);
        }
        for(i=0; i<10; ++i)
        {
            cout<<mq.front()<<endl;
            mq.pop();
        }
        return 0;
    }
    

    2. 编程实现栈的入栈和出栈操作

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    using namespace std;
    
    
    //定义一个栈
    typedef struct student{
    	int data;
    	struct student *next;
    }node;
    
    typedef struct stackqueue{
    	node *zhandi,*top;
    };
    
    //定义入栈
    queue *push(queue *HQ,int x){
    	node *s,*p;
    	s=(node*)malloc(sizeof(node));
    	s->data=x;
    	s->next=NULL;
        //如果是空栈,则顶底都是s 
    	if(HQ->zhandi==NULL){
    		HQ->zhandi=s;
    		HQ->top=s;
    	}else{
    	//不是空栈,先将栈顶的下一个指针指向s
    	//再将s定义为栈顶 
    		HQ->top->next=s;
    		HQ->top=s;
    	}
    	return HQ;
    }
    
    
    //定义出栈:
    queue *pop(queue *HQ){
    	node *p;int x;
    	if(HQ->zhandi==NULL){
    		cout<<"已经没有元素"<<endl; 
    	}else{
    		x=HQ->zhandi->data;
    		p=HQ->zhandi;
    		if(HQ->zhandi==HQ->top){
    			HQ->zhandi=NULL;
    			HQ->top==NULL;
    		}else{
    			while(p->next!=HQ->top){
    				p=p->next;
    			}
    			HQ->top=p;
    			HQ->top->next=NULL;
    		}
    		return HQ;
    	}
    } 
    

    3. 编程实现队列的入队和出队操作

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    
    //首先定义队列
    typedef struct student{
    	int data;
    	struct student *next;
    }node;
    
    typedef struct linkqueue{
    	node *first,*rear;
    }queue;
    
    
    //定义入队
    queue *insert(queue *HQ,int x){
       node *s;
       s=(node *)malloc(sizeof(node));
       s->data=x;
       s->next=NULL;
       if(HQ->rear==NULL){
       	//HQ没有队尾,则为空
    	//就让s成为他的队尾 和队头 
       	HQ->first=s;
       	HQ->rear=s;
       }else{
       	//先让队尾的下一个元素指向s
    	//将 s变为现在的队尾 
       	HQ->rear->next=s;
       	HQ->rear=s;
       }
       return HQ;
    }
    
    
    //队列出队
    queue *del (queue *HQ){
    	int x;
            node *p;
    	if(HQ->first==NULL){
    		cout<<"队列为空,无元素移除"<<endl;
    	}
    	else{
    		x=HQ->first->data;
                    p=HQ->first;
    		//判断是否只有一个元素
    		if(HQ->first==HQ->rear){
    			HQ->first=NULL;
    			HQ->rear=NULL;
    		}else{
    			HQ->first=HQ->first->next;
                            free(p);
    		}
    	}
    	return HQ;
    }
    

    ok!

  • 相关阅读:
    linux磁盘管理
    yarn一直在跑一个用户为dr.who的application
    HBASE强制删除表
    Centos安装git2.2.1
    MySQL类型float double decimal的区别
    PHP的extension_dir设置问题
    opencart安装和使用PHPMailer
    在路上
    修改win10中linux子系统的root密码
    关于js for循环click事件
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/6964007.html
Copyright © 2011-2022 走看看