棧和佇列都是受限的線性表,棧只能從一端進出,佇列只能一端進一端出
棧有兩個端,表尾端稱為棧頂(top),表頭端稱為棧底(bottom),不含元素的空表稱為空棧
原則:後進先出
順序棧利用順序儲存結構實現棧,這指標top表示棧頂元素在順序棧中的位置,設base表示棧底元素的位置
實現
//順序棧
//初始化後,base始終指向棧底,若base==null,表明棧結構不存在。top初始
//指向棧底,表明空棧,每當有元素入棧時top++,出棧時top--
#includeusing namespace std;
#define maxsize 3
class orderedstack;
~orderedstack(){};
};void initstack(orderedstack &s);
~linkedstack(){};
};typedef linkedstack * linkpoint;
void initstack(linkpoint &s)
void push(linkpoint &s,int e)
void pop(linkpoint &s,int &e)
void getelem(linkpoint &s)
delete p;
}int main()
棧的應用
經典演算法:計算表示式的值
1.初始化兩個棧,運算元棧和運算子棧
2.若掃瞄到運算元,壓入運算元棧
3.若掃瞄到運算子或界限符(主要是"()"),則比對運算子棧頂與掃瞄到的運算子或界限符的優先順序,如果棧頂符號的優先順序大於掃瞄的,則彈出運算子棧,運算元棧彈出兩個值,按照彈出的運算子進行運算後自此壓入運算元棧。
4.掃瞄到字元結尾,將運算元棧頂元素彈出就是結果
工具:c++stack庫
stack
sx;
t為資料型別,sx為變數名,建立棧
函式:s.empty(); //如果棧為空則返回true, 否則返回false;
s.size(); //返回棧中元素的個數
s.top(); //返回棧頂元素, 但不刪除該元素
s.pop(); //彈出棧頂元素, 但不返回其值
s.push(x); //將元素壓入棧頂
實現
//表示式求值
#include#includeusing namespace std;
stackschar;//運算子棧
stacksdouble;//運算元棧
int getindex(char operat)
return index;
}char getpriority(char operat1,char operat2),,,
,,,,
};int index1=getindex(operat1);
int index2=getindex(operat2);
return priority[index1][index2];//這裡沒有異常處理,當index=-1
}double calculate(double a,char operat,double b)
}double getanswer()else
c=getchar();
}else}}
return sdouble.top();
}int main();
void initqueue(circularqueue &q);
typedef linkedqueue * queueptr;
class linkqueue;
void initqueue(linkqueue &q)
void enqueue(linkqueue &q,int e)
void dequeue(linkqueue &q,int &e)
void gethead(linkqueue q)
}int main()
資料結構 四 棧和佇列
adt 棧 stack data 同線性表。元素具有相同的型別,相鄰元素具有前驅和後堆關係。operation initstack s 初始化操作.建立乙個空棧s。destroystack s 若棧存在,則銷毀它。clearstack s 將棧清空。stackempty s 若棧為空,返回true,...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
大話資料結構(四) 棧和佇列
棧 一種線性表,限定只能在表尾進行插入和刪除的操作。這裡的表尾指的是棧頂,lifo結構。兩棧共享空間的資料結構一般用在兩個棧的空間需求有相反關係時,也就是乙個棧在增長時另乙個棧在縮短的情況,但是前提是兩個棧具有相同的資料型別。迭代和遞迴 迭代使用的是迴圈結構,遞迴使用的是選擇結構。遞迴必須至少有乙個...