1、棧:僅在表尾進行插入和刪除操作的線性表。後進先出lifo。
1)表尾端(允許插入和刪除的一端)為棧頂,表頭端(不允許插入和刪除的一端)為棧底。
2)入棧:插入元素的操作。出棧:刪除棧頂元素
2、棧的兩種儲存表示方式
2)鏈棧(棧的鏈式儲存結構);優點是便於多個棧共享儲存空間和提高效率。
3、括號匹配檢驗
1)左括號,則進棧。
2)右括號,若棧為空,則右括號多。
3)右括號,與棧頂元素比較,若相等則左括號出棧,若不相等則不匹配。
4)表示式檢驗結束時,若棧空則匹配成功,否則左括號多。
4、棧的基本操作
initstack(&s):構造空棧
destroystack(&s):銷毀棧
clearstack(&s):清空棧
stackempty(s):判斷棧是否為空,若為空則返回true,否返回false
stacklength(s):返回棧的長度
gettop(s,&e):用e返回棧的棧頂元素
push(&s,e):插入e為新棧頂
pop(&s,&e):刪除棧頂元素,並用e返回其值。
5、共享棧:利用棧底位置相對不變性的特性,使得兩個順序棧共享乙個一維資料空間,將兩個棧底設定在共享空間的兩端。
1)top0=-1時0號棧為空,top1=maxsize時1號棧為空,僅當兩個棧頂指標相鄰(top1-top0=1)時,棧滿。
2)當0號棧進棧時top0先加1再賦值,1號棧進棧時top1先減1在賦值。
6、棧的順序儲存型別描述
#define maxsize 50
typedef struct sqstack;
1)初始化棧
void initstack(sqstack &s)
2)判斷棧空
bool stackempty(sqstack s)
else
}3)進棧
bool push(sqstack &s, int e)
s.data[++s.top] = e;
return true;
}5)出棧
bool pop(sqstack &s, int &e)
e = s.data[s.top--];
return true;
}6)讀棧頂元素
bool gettop(sqstack s, int &e)
e = s.data[s.top--];
return true;
}7、棧的鏈式儲存結構型別描述
typedef struct linkstack *listack;
8、一些基本問題的解決
1)以io分別表示入棧和出棧操作,棧的初態和終態都為空,可以操作的序列稱為合法序列,判斷序列是否合法。
int judge(cha a)
}i++;
}if (j != k)
else
}2)設棧s1,s2都擦用順序棧,並共享乙個儲存區[0,...,maxsize-1],採用棧頂相向、迎面增長的儲存方式,出棧和入棧的實現。i為棧號,i=0表示左邊的棧s1,i=1表示右邊的棧s2,e為入棧元素。
typedef struct stk;
stk s;
//入棧
int push1(int i, int e)
if (s.top[1] - s.top[0] == 1)
switch (i)
}//出棧
int pop1(int i)
switch (i)
else
case 1:
if (s.top[1] == maxsize)
else}}
資料結構(C語言版)
用棧實現數字的進製轉換 10轉8 棧 限定只能在表尾進行插入或者刪除操作的線性表 特點 先進後出 儲存表示方法 順序棧和鏈棧 本文用的順序棧 實現 readonly name code class c include include define stack init size 100 儲存空間初始...
資料結構與演算法(C語言版) 棧
棧是一種常用的資料結構,棧常用在系統軟體和或者演算法中。棧使用陣列來做順序棧,鏈式站用鍊錶來做。今天使用動態陣列來設計棧。棧,後進先出 lifo 先進後出 filo push,進棧 pop,出棧 peek,看一下棧頂 我使用的是vs ultimate2013 新建乙個空專案,在標頭檔案裡面新增兩個標...
資料結構棧的實現 C語言版
include include 棧的初始長度 define stack init size 100 棧滿時,棧的每次增加的大小 define stackincrement 10 棧中的資料型別是int typedef int selemtype 定義棧的棧底指標,棧頂指標,以及棧的容量 typede...