棧——鏈表描述
鏈表描述中,棧裏的元素連接關係是,從上而下棧頂元素向棧底元素指針連接。
//關於數據結構中棧的操作,用一個類,實現棧的建立、入棧、出棧、刪除棧的操作。
#include <iostream>
using namespace std;
struct node //定義一個結構體,它是棧裏的元素
{
int x;
node* next;
};
class stack
{
public:
stack():top(NULL),size(0){} //構造函數初始化棧頂指針,棧頂指向空指針,棧裏元素的大小爲0
~stack(); //析構函數刪除堆棧
int pop(); //出棧
void push(int n); //進棧
private:
node *top; //node節點是棧的元素
int size; //棧裏元素的個數
};
stack::~stack()
{
node *p=top;
while(p!=NULL)
{
p=top->next; //用top的next賦值p,使p指向新的棧頂元素
delete [] top; //刪除以前的棧頂元素top,釋放所指向的結點
top=p; //再用top指向棧頂元素,直到循環結束,棧內元素全部刪除
}
}
void stack::push(int n) //進棧(壓棧)操作,增加一個元素放在棧頂
{
node* temp=new node; //定義一個臨時指針
temp->x=n;
temp->next=top; //使新結點的next指針指向棧頂(數據)
top=temp; //用新增加指針更新棧頂指針
size++; //棧裏元素個數加1
}
int stack::pop() //出棧操作,返回棧頂元素值,並刪除第一個棧頂元素
{
node* temp; //定義一個臨時node指針
int back; //返回值
if(size) //用size判斷是否棧裏還有元素
{
temp=top; //使temp指向棧頂結點
back=top->x;
top=top->next; //用top自身更新指針,使top指向下一個元素,即出棧以後的棧頂結點
delete []temp; //通過臨時指針刪除棧頂
size--;
return back;
}
else
{
cout<<"棧已經爲空!"<<endl;
exit(0);
}
}
int main()
{
stack s;
for(int i=1;i<=10;i++)
s.push(i);
cout<<"The element of stack are: ";
for(i=1;i<=20;i++)
cout<<s.pop()<<" ";
cout<<endl;
return 0;
}