顺序栈
首先让我们来了解什么是栈?
栈是存放数据对象的一种特殊容器,栈中的元素始终遵循后进先出的顺序
利用这个特点我们就能解决许多实际生活中的问题.
博主在这篇博客中打算利用栈来解决生活中的打字问题.
让我们来假设这样一个场景 :
你正在修改你自己的QQ签名(最多保存50个字),但是打着打着打错了一个字,这时候你就需要将打错的一个或者几个字删掉
这就要用到我们的栈了,利用这种后进先出的特点就能 实现我们签名修改.
实验目的:
(1) 实现栈的存储结构设计;
(2) 实现栈的操作算法设计;
(3) 利用栈实现应用问题的解决;
实验内容:
栈的初始化
打印栈内所有元素
获取栈顶元素且栈顶元素不出站
判断栈空(栈满不需要进行判断在入栈时就已经杜绝了这种情况)
入栈和出栈算法设计;
#include<iostream> #include<Windows.h> using namespace std; #define MaxSize 50 typedef struct _SqStack { int *base; //栈底指针 int *top; //栈顶指针 }SqStack; //初始化栈 bool InitSq(SqStack &Sq) { Sq.base = new int[MaxSize]; if (!Sq.base) return false; Sq.top = Sq.base; return true; } //入栈 bool PushStack(SqStack &Sq,int Element) { *Sq.top = Element; Sq.top++; return true; } //获取栈顶元素栈顶元素不出栈 void GetTopSq(SqStack &Sq) { cout << "打印栈顶元素!" << endl; cout << "栈顶元素是: " << *(Sq.top - 1) << endl; } //打印栈内所有元素 void Print(SqStack &Sq) {//利用临时的打印所有元素,不改变以前的栈的结构!!! SqStack tmp = Sq; cout << "栈内元素分别是: "; while (tmp.top > tmp.base) { cout << *(--tmp.top) << " "; } } //出栈 bool PopStack(SqStack &Sq, int &Element) { if (Sq.top == Sq.base) { cout << "这是个空栈!! "; return false; } else { Element = *(--Sq.top); } return true; } int main(void) { SqStack Sq ; //实现栈的初始化 if (InitSq(Sq)) { cout << "初始化栈成功! " << endl; } else { cout << "初始化栈失败! " << endl; } int num; //获取用户想要入栈或者出栈的个数,不得超过栈的最大容量!!! int Element; //入栈或者出栈的元素值 cout << "请输入你想要入栈的个数,不得超过本栈的最大容量(50) " << endl; cin >> num; //目的是让用户输入正确的入栈个数!!!! while (1) { if (num > MaxSize) { cout << "****************************"; cout << "对不起,您输入的入栈个数超过了本栈的最大容量!!! 请重新输入!!! " << endl; cout << "请输入你想要入栈的个数,不得超过本栈的最大容量(50)!!!" << endl; cin >> num; } else { break; } } for (int i = 0; i < num; i++) { cout << "请输入你想要入栈的元素: "; cin >> Element; //实现入栈 if (PushStack(Sq,Element)) { cout << "元素 " << Element << " 入栈成功! " << endl; } else { cout << "入栈失败! " << endl; } } //打印刚刚入栈的元素的栈顶元素元素不出栈 GetTopSq(Sq); //打印所有栈内元素!!! Print(Sq); //出栈 cout << endl; cout << "请输入你想要出栈的个数,不得超过现在本栈的最大容量: " <<Sq.top-Sq.base<< endl; cin >> num; //目的是让用户输入正确的出栈个数!!!! while (1) { if (num > Sq.top - Sq.base) { cout << "****************************"; cout << "对不起,您输入的入栈个数超过了本栈的最大容量!!! 请重新输入!!! " << endl; cout << "请输入你想要入栈的个数,不得超过本栈的最大容量: !!!!" << Sq.top - Sq.base<< endl; cin >> num; } else { break; } } for (int i = 0; i < num; i++) { //实现出栈 if (PopStack(Sq, Element)) { cout << "元素 " << Element << " 出栈成功! " << endl; } else { cout << "出栈失败! " << endl; } } Print(Sq); cout << "现在再入栈一个元素吧!,然后我们的程序就结束了!!!! " << endl; cout << "***************************"; cout << "请输入你想要入栈的元素: "; cin >> Element; //实现入栈 if (PushStack(Sq, Element)) { cout << "元素 " << Element << " 入栈成功! " << endl; } else { cout << "入栈失败! " << endl; } Print(Sq); system("pause"); return 0; }