生活随笔
收集整理的這篇文章主要介紹了
链栈的压栈和出栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<iostream>using namespace std;typedef float datatype;struct node //節點類型定義{datatype data;struct node *next;};class linkstack //棧結構定義{public:linkstack(){top=NULL;} //構造函數,初始化一個空鏈棧~linkstack(); //析構函數,釋放鏈棧中各結點的儲存空間void push(datatype x); //入棧操作,將元素x入棧datatype pop(); //出棧操作,將棧頂元素出棧datatype getpop(); //取棧頂元素(并不刪除)bool IsEmpty(){return (NULL==top)?true:false;} //判空操作,判斷鏈棧是否為空棧,棧空則返回1,棧非空則返回0private:struct node *top; //棧頂指針即鏈棧的頭指針};linkstack::~linkstack(){while(top){node *p=top; //暫存被釋放的結點top = top->next; //top指向被釋放結點的下一個結點delete p;}}void linkstack::push(datatype x){node *p=new node; //申請一個數據域為x的結點p->data=x; p->next = top; //將節點插在棧頂top=p;}datatype linkstack::pop(){if (IsEmpty()) throw "下溢";datatype x=top->data; //暫存棧頂元素node *p=top;top=top->next; //將棧頂結點摘鏈delete p;return x;}datatype linkstack::getpop(){if(top!=NULL)return top->data; //返回棧頂指針top所指結點的數據域elsecout<<"Stack is Empty !"<<endl;}int main(){linkstack mystack;cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;for(int i = 0;i < 10;i++){mystack.push(i);cout<<i<<endl;}cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;for(int i=0;i<10;i++){cout <<"The top of the stack is :" << mystack.getpop() << endl;mystack.pop();}cout <<"Is stack Empty:" << mystack.IsEmpty() << endl;system("pause");return 0;}
運行結果:
總結
以上是生活随笔為你收集整理的链栈的压栈和出栈的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。