數據結構——15 棧鏈表描述

棧——鏈表描述


棧——進棧、出棧、打印(鏈表描述)
鏈表描述中,棧裏的元素連接關係是,從上而下棧頂元素向棧底元素指針連接。

//關於數據結構中棧的操作,用一個類,實現棧的建立、入棧、出棧、刪除棧的操作。

#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;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章