数据结构实验二

顺序栈:

#ifndef SeqStack_H

#define SeqStack_H

const int StackSize=10;

template<class DataType>

class SeqStack

{

public:

SeqStack();

~SeqStack(){};

void Push(DataType x);

DataType Pop();

DataType GetTop();

int Empty();

private:

DataType data[StackSize];

int top;

};

#endif

 

#include"SeqStack.h"

template<class DataType>

SeqStack<DataType>::SeqStack()

{

top=-1;

}

 

template<class DataType>

void SeqStack<DataType>::Push(DataType x)

{

if(top==StackSize-1)throw"上溢";

top++;

data[top]=x;

}

 

template<class DataType>

DataType SeqStack<DataType>::Pop()

{

DataType x;

if(top==-1)throw"下溢";

x=data[top--];

return x;

}

 

template<class DataType>

DataType SeqStack<DataType>::GetTop()

{

if(top!=-1)

return data[top];

}

 

template<class DataType>

int SeqStack<DataType>::Empty()

{

if(top==-1)return 1;

else return 0;

}

 

#include<iostream>

using namespace std;

#include "SeqStack.cpp"

 

void main()

{

SeqStack<int>S;

if(S.Empty())

cout<<"栈为空"<<endl;

else

cout<<"栈非空"<<endl;

cout<<"20,15,10执行入栈操作"<<endl;

S.Push(20);

S.Push(15);

S.Push(10);

cout<<"栈顶元素:"<<endl;

cout<<S.GetTop()<<endl;

cout<<"执行一次出栈操作:"<<endl;

S.Pop();

cout<<"栈顶元素"<<endl;

cout<<S.GetTop()<<endl;

}

 

链栈:

#include<iostream.h>  

struct Node  

{  

    int data;  

    Node *next;  

};  

class LinkStack  

{  

public:  

    LinkStack()  {  top=NULL;  }  

    ~LinkStack();  

    void Push(int x);  

    int Pop();  

    int GetTop()  {  if(top!=NULL)return top->data;  }  

    bool Empty()  

    {  

        if(top==NULL)return 1;  

        else return 0;  

    }  

private:  

    Node *top;  

};  

  

LinkStack::~LinkStack()    

{    

    Node *p;    

    while(top!=NULL)    

    {    

        p=top;    

        top=top->next;    

        delete p;    

    }    

}  

void LinkStack::Push(int x)    

{    

    Node *s=new Node;    

    s->data=x;    

    s->next=top;    

    top=s;    

}   

int LinkStack::Pop()    

{    

    Node *p;    

    int x;    

    if(top==NULL)cout<<"Stack is empty"<<endl;    

    else    

    {    

     x=top->data;    

     p=top;    

     top=p->next;    

     delete p;    

     return x;    

    }    

}      

int main()    

{       

    LinkStack s;  

    cout<<"101520执行压栈操作"<<endl;  

    s.Push(10);    

    s.Push(15);    

    s.Push(20);  

    cout<<"栈顶元素为:"<<endl;  

    cout<<s.GetTop()<<endl;  

    cout<<"执行一次出栈操作"<<endl;  

    s.Pop();

    cout<<"栈顶元素为:"<<endl;  

    cout<<s.GetTop()<<endl;    

    return 0;    

}    

 

 

顺序队列:

#include <iostream>  

using namespace std;  

  

template <class DataType>  

class Queue{  

    private:  

        int front;  

        int rear;   

        int MaxSize;   

        DataType *data;  

        int number;  

    public:  

        Queue(int max=10):MaxSize(max)

{    

            front=0;     

            rear=0;  

            number=0;  

            data = new DataType[MaxSize];  

        }  

        ~Queue(){   

            delete [] data;    

        }  

        void EnQueue(DataType x);

        void DeQueue();     

        DataType GetQueue() const;    

        int getLength() const;  

        bool Full() const;    

        bool Empty() const;  

        void Display() const;  

};  

  

template <class DataType>  

void Queue<DataType>::EnQueue(DataType x)

{   

    data[rear]=x;  

    rear=(rear+1)%MaxSize;  

    number++;  

}  

  

template <class DataType>  

void Queue<DataType>::DeQueue()

{  

    front=(front+1)%MaxSize;  

    number--;  

}  

  

template <class DataType>  

DataType Queue<DataType>::GetQueue() const

{

    return data[front];  

}  

  

template <class DataType>  

int Queue<DataType>::getLength()const

{

    return number;  

}  

  

template <class DataType>  

bool Queue<DataType>::Full()const

{  

    return number==MaxSize;  

}  

  

template <class DataType>  

bool Queue<DataType>::Empty()const

{

    return number==0;  

}  

  

template <class DataType>  

void Queue<DataType>::Display() const

{  

    int p = front;  

    int i=1;  

    while(p!=rear)

{  

        cout<<""<<i<<"元素:"<<data[p]<<endl;  

        i++;  

        p = (p+1)%MaxSize;  

    }  

}  

  

void main(){  

    Queue<int> *a = new Queue<int>(5);  

    cout<<"队列是否为空:"<<a->Empty()<<endl;  

cout<<"输入元素965694756"<<endl;

    a->EnQueue(9);  

    a->EnQueue(65);

    a->EnQueue(69);    

    a->EnQueue(47);    

    a->EnQueue(56);     

a->Display();

    cout<<"队列是否已满:"<<a->Full()<<endl;    

    cout<<"队列元素个数:"<<a->getLength()<<endl;  

cout<<"第一个元素出队"<<endl;

    a->DeQueue();  

    cout<<"队列元素个数:"<<a->getLength()<<endl<<endl;  

    a->Display();   

}  

 

 

 

链队列:

#ifndef LinkQueue_H

#define LinkQueue_H

template<class DataType>

struct Node

{

DataType data;

Node<DataType> *next;

};

 

template<class DataType>

class LinkQueue

{

 

public:

LinkQueue();

~LinkQueue();

void EnQueue(DataType x);

DataType DeQueue();

DataType GetQueue();

int Empty();

private:

Node<DataType> *front,*rear;

};

#endif;

 

#include"LinkQueue.h"

template<class DataType>

LinkQueue<DataType>::LinkQueue()

{

Node<DataType> *s=NULL;

s=new Node<DataType>;

s->next=NULL;

front=rear=s;

}

 

template<class DataType>

LinkQueue<DataType>::~LinkQueue()

{

Node<DataType> *p=NULL;

while(front!=NULL)

{

p=front->next;

delete front;

front=p;

}

}

 

template<class DataType>

void LinkQueue<DataType>::EnQueue(DataType x)

{

Node<DataType> *s=NULL;

s=new Node<DataType>;

s->data=x;

s->next=NULL;

rear->next=s;rear=s;

}

 

template<class DataType>

DataType LinkQueue<DataType>::DeQueue()

{

Node<DataType> *p=NULL;

int x;

if(rear==front)throw"下溢";

p=front->next;

x=p->data;

front->next=p->next;

if(p->next==NULL)rear=front;

delete p;

return x;

}

template<class DataType>

DataType LinkQueue<DataType>::GetQueue()

{

if(front!=rear)

return front->next->data;

}

 

template<class DataType>

int LinkQueue<DataType>::Empty()

{

if(front==rear)

return 1;

else

return 0;

}

 

#include<iostream>

using namespace std;

#include"LinkQueue.cpp"

 

void main()

{

LinkQueue<int>Q;

if(Q.Empty())

cout<<"队列已空"<<endl;

else

cout<<"队列非空"<<endl;

cout<<"元素201510执行入队操作"<<endl;

try

{

Q.EnQueue(20);

Q.EnQueue(15);

Q.EnQueue(10);

}

catch(char* wrong)

{

cout<<wrong<<endl;

}

cout<<"查看队头元素:"<<Q.GetQueue()<<endl;

cout<<"执行出队操作"<<endl;

try

{

Q.DeQueue();

}

catch(char* wrong)

{

cout<<wrong<<endl;

}

cout<<"查看队头元素:"<<Q.GetQueue()<<endl;

}

 

10进制转换为2进制

#include<iostream>

using namespace std;

int main()

{

   int i,j=0;

   int a[1000];

   cout<<"输入一个数:";

   cin>>i;

   while(i)

   {

    a[j]=i%2;

    i/=2;

    j++;

    

   }

   cout<<"转换为二进制数:";

   for(i=j-1;i>=0;i--)

   cout<<a[i];

   cout<<endl;

   return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值