码迷,mamicode.com
首页 > 其他好文 > 详细

栈和队列

时间:2015-08-26 19:57:40      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:



栈: 使用数组实现,就要用类来表示,类可以保存携带数据。。
技术分享
// My_stack.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;


class mystack
{
public:
    mystack(){top=0;}
    bool full();
    bool isEmpty();
    void push(int i);
    int pop();
    friend void print(mystack &);
    friend ostream& operator<<(ostream& os,mystack& ms);
private:
    int a[10];
    int top;
};
ostream& operator<<(ostream& os,mystack& ms)
{
    os<<ms.a;
    return os;
}
void print(mystack & ms)
{
    for (int i=0;i<10;i++)
    {
        cout<<ms.a[i]<<" ";
    }
    cout<<endl;
}
bool mystack::full()
{
    if (top==10)
        return true;
    else return false;
}
bool mystack::isEmpty()
{
    if (top==0)return true;
    else return false;
}

void mystack::push(int i)
{
    if (full())
        cout<<"stack overflow!"<<endl;
    else
    {
        top=top+1;
        a[top]=i;
    }
}

int mystack::pop()
{
    if (isEmpty())
    {
        cout<<"stack underflow!"<<endl;
        return -1;
    }
    else
    {
        top--;
        return a[top+1];
    }    
}

int _tmain(int argc, _TCHAR* argv[])
{
    mystack ms;
    cout<<ms.isEmpty()<<endl;

    for (int i=0;i<10;i++)
    {
        ms.push(2*i);
        cout<<"push "<<i<<endl;
    }
    cout<<ms.full()<<endl;
    print(ms);
    cout<<ms.pop()<<endl;
    system("pause");
    return 0;
}
my_stack

 

 队列:使用链表实现

技术分享
// My_queue.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

typedef struct node
{
    int data;
    node* next;
}Node;

typedef struct myQueue
{
    node* front;
    node* rear;
}myQueue;

myQueue* createQueue()
{
    myQueue* q=(myQueue*)malloc(sizeof(node));//头结点
    q->front=NULL;
    q->rear=NULL;
    return q;
}

myQueue* enqueue(myQueue* q,int data)
{
    Node* new_Node=(Node*)malloc(sizeof(Node));
    new_Node->data=data;
    new_Node->next=NULL;
    if (q->rear==NULL)
    {//队列为空,队首队尾都指向new_node
        q->front=q->rear=new_Node;
    }
    else
    {//不空,将新节点连接到最后一个节点q->rear之后
        q->rear->next=new_Node;
        q->rear=new_Node;
    }
    return q;
}

myQueue* dequeue(myQueue* q)
{
    Node* dq=NULL;
    dq=q->front;
    if (dq==NULL)cout<<"empty!"<<endl;
    else
    {
        q->front=q->front->next;
        if (q->front==NULL)
            q->rear=NULL;//一个节点的情况
        free(dq);
    }
    return q;
}

int GetLength(myQueue* q)
{
    Node* gq=NULL;
    gq=q->front;
    int i=0;
    while (gq!=q->rear)
    {
        i++;
        gq=gq->next;
    }
    i++;
    return i;
}
void print(myQueue* q)
{
    Node* pq=NULL;
    pq=q->front;
    if(pq==NULL)
    {
        cout<<"empty!"<<endl;
        return;
    }
    while (pq!=q->rear)
    {
        cout<<pq->data<<" ";
        pq=pq->next;
    }
    cout<<q->rear->data<<endl;
    if(pq==NULL) cout<<"queue is empty!"<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    myQueue *mq=createQueue();
    print(mq);
    enqueue(mq,1);
    enqueue(mq,2);
    enqueue(mq,3);
    enqueue(mq,4);
    int i=GetLength(mq);
    print(mq);
    dequeue(mq);
    print(mq);
    dequeue(mq);
    print(mq);
    dequeue(mq);
    print(mq);
    dequeue(mq);
    print(mq);
    system("pause");
    return 0;
}
myqueue

 

栈和队列

标签:

原文地址:http://www.cnblogs.com/lp3318/p/4755617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!