資料結構之棧

2022-09-08 15:12:09 字數 2326 閱讀 3954

棧是應用最廣泛的資料結構之一,很有必要對其進行一些總結。

棧(stack)是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,叫做棧的頂(top),它是後進先出(lifo)的。

對棧的基本操作只有push(進棧)和pop(出棧)兩種,前者相當於插入,後者相當於刪除最後的元素。

棧本質上是一種受限制的表,所以可以使用任何一種表的形式來實現它,最常用的是使用鍊錶陣列

使用鍊錶的特點:

不需要指定其大小,不會浪費空間;

進棧和出棧涉及到動態記憶體的申請釋放,時間花銷大;

使用陣列的特點:

需要指定其大小,有可能浪費空間,也可能空間不夠用;

進棧和出棧不涉及動態記憶體的申請釋放,因此時間上幾乎沒有花銷;

另外支援隨機訪問。

結論:

一般使用鍊錶是首選,除非滿足兩個條件:

1.對執行時的效率要求極高;

2.能夠預知棧需要的空間大小。

使用陣列的完整**:

//標頭檔案

#ifndef stack_h

#define stack_h

#include

using

std::cout;

using

std::endl;

class cstack

bool full()

int gettop()

int getsize()

void size_increament();

void push(int x);

void pop();

void display();

private:

int *data;

int top;

int maxsize;

const

int sizeincreament = 50;

};//分號不可少

#endif

//實現檔案

#include "stack.h"

cstack::cstack()

cstack::~cstack()

void cstack::size_increament()

for (int i = 0; i <= top; ++i)

newdata[i] = data[i];

maxsize = maxsize + sizeincreament;

delete data;

data = newdata;

}void cstack::push(int x)

else

}void cstack::pop()

else

}void cstack::display()

else

}//測試檔案

#include "stack.h"

int main()

使用鍊錶的完整**:

//標頭檔案

#ifndef linkstack_h

#define linkstack_h

#include

struct node

;class linkstack

~linkstack();

int gettop()

void push(int x);

int pop();

bool empty()

void display();

private:

node *top;

};#endif // !linkstack_h

//實現檔案

#include "linkstack.h"

linkstack::~linkstack()

}void linkstack::push(int x)

int linkstack::pop()

else

}void linkstack::display()

}//測試檔案

#include "linkstack.h"

using

std::cout;

using

std::endl;

int main()

資料結構之棧結構

棧結構是一種filo first in last out 的批量資料儲存結構。其特點是先進後出,後來者居上 棧的基本屬性 棧記憶體 棧頂標記 棧的當前元素個數 萬金油屬性 size 棧的基本操作 萬金油的的操作 根據實現的不同將棧結構分為兩種 1.鏈式棧 2.陣列 利用有表頭鍊錶的頭插法來完成棧的功...

資料結構之棧

4.8.2 四則運算表示式求值 程式如下所示 include include include 定義結點型別 typedef struct node node,pnode 定義棧的抽象資料型別 typedef struct stack stack,pstack 函式宣告 對棧進行初始化的函式 void...

資料結構之棧

資料結構之棧 本文討論棧的陣列實現。棧需要有如下幾個屬性 棧的容量 capacity 棧頂指標 儲存棧元素的陣列 根據這幾個屬性可以定義乙個棧結構體 struct stackrecord 然後定義棧的操作,一般可以包含如下幾個 棧的建立 stack createstack int size 棧的銷毀...