数据结构实验二


一.顺序栈

#include <iostream>    

using namespace std;    

const int MAX=10;    

class SeqStack{    

private:    

int top;    

 int data[MAX];    

public:    

   SeqStack(){top=-1;}    

  ~SeqStack(){}    

  void Push(int x);    

  int Pop();    

  int GetTop(){if (top!=-1) return data[top];};   

    int Empty();    

};    

void SeqStack::Push(int x){    

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

    top++;    

  data[top]=x;    

}    

int SeqStack::Pop(){    

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

  int x=data[top];    

  top--;    

  1.   return x;    

}    

int SeqStack::Empty(){    

   if (top==-1) return 1; else return 0;    

}    

int main(){    

   SeqStack S;    

   if (S.Empty())    

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

  else   

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

    cout<<"15入栈:"<<endl;    

   S.Push(15);    

   cout<<"10入栈:"<<endl;    

   S.Push(10);    

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

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

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

   S.Pop();    

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

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

   return 0;    

}   

二.链栈

#include <iostream>    

using namespace std;    

struct Data {    

   int data;    

   struct Data *next;    

} *s;    

class SeqStack{    

private:    

   struct Data *top;    

public:    

   SeqStack(){top=NULL;}    

   ~SeqStack(){}    

  void Push(int x);    

   int Pop();    

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

   int Empty();    

};    

void SeqStack::Push(int x){    

   s=new struct Data;    

   s->data=x;    

   s->next=top;    

   top=s;    

}    

int SeqStack::Pop(){    

   int x=top->data;    

   top=top->next;    

   return x;    

}    

int SeqStack::Empty(){    

   if (top==NULL) return 1; else return 0;    

}    

int main(){    

   SeqStack S;    

   if (S.Empty())    

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

   else   

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

   cout<<"15入栈:"<<endl;    

   S.Push(15);    

   cout<<"10入栈:"<<endl;    

   S.Push(10);    

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

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

   cout<<"一次出栈:"<<endl;    

   S.Pop();    

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

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

   return 0;    

}



三.顺序队

  1. #include <iostream>    

using namespace std;  

const int MAX=10;    

class Queue{  private:      

int front;       

int rear;       

int data[MAX];    

public:    

  Queue(){front=rear=MAX-1;}    

   ~Queue(){} ;      

void EnQueue(int x);      

int DeQueue();     

  int GetQueue()  

{if   

(front!=rear) return data[(front+1)%MAX];  

};      

int Empty();  };    

void Queue::EnQueue(int x){    

   if ((rear-1)%MAX==front) throw "上溢";   

rear=(rear+1)%MAX;    data[rear]=x;    

}    

int Queue::DeQueue(){      

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

int x=data[front];     

front=(front+1)%MAX;     

return x;  

  }    

int Queue::Empty(){    

   if (front==rear) return 1;   

else return 0;    

}  

int main(){  

    Queue S;       

if (S.Empty())         

  cout<<"队为空!"<<endl;     

  else      

  cout<<"队不为空!"<<endl;    

  cout<<"15入队:"<<endl;     

cout<<"10入队:"<<endl;      

S.EnQueue(10);      

cout<<"队头元素为:"<<endl;     

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

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

S.DeQueue();      

cout<<"队头元素为:"<<endl;     

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

  return 0;  

}

  四.栈队

#include <iostream>   

using namespace std;   

struct Data {     

  int data;     

  struct Data *next;    

} *q;    

class Queue{    

private:    

  Data *rear,*front;    

public:    

  Queue(){rear=NULL;front=NULL;}    

   ~Queue(){}    

   void EnQueue(int x);    

   int DeQueue();    

   int GetQueue();    

   int Empty();    

};    

void Queue::EnQueue(int x){    

   q=new  Data;    

   q->data=x;    

   q->next=NULL;    

  if (Empty())    

       front=rear=q;     //若队为空,让队头和队尾指针都指向新增空间   

   else {    

       rear->next=q;    

       rear=q;}    

}    

int Queue::DeQueue(){    

   if (Empty()) throw "下溢";    

   q=front;    

  int x=front->data;    

   front=front->next;    

   delete q;    

   return x;    

}    

#include <iostream>    

using namespace std;  

const int MAX=10;    

class Queue{  private:      

int front;       

int rear;       

int data[MAX];    

public:    

  Queue(){front=rear=MAX-1;}    

   ~Queue(){} ;      

void EnQueue(int x);      

int DeQueue();     

  int GetQueue()  

{if   

(front!=rear) return data[(front+1)%MAX];  

};      

int Empty();  };    

void Queue::EnQueue(int x){    

   if ((rear-1)%MAX==front) throw "上溢";   

rear=(rear+1)%MAX;    data[rear]=x;    

}    

int Queue::DeQueue(){      

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

int x=data[front];     

front=(front+1)%MAX;     

return x;  

  }    

int Queue::Empty(){    

   if (front==rear) return 1;   

else return 0;    

}  

int main(){  

    Queue S;       

if (S.Empty())         

  cout<<"队为空!"<<endl;     

  else      

  cout<<"队不为空!"<<endl;    

  cout<<"15入队:"<<endl;     

S.EnQueue(15);       

cout<<"10入队:"<<endl;      

S.EnQueue(10);      

cout<<"队头元素为:"<<endl;     

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

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

S.DeQueue();      

cout<<"队头元素为:"<<endl;     

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

  return 0;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值