赞
踩
栈是一种先进后出的数据结构,可以分为:顺序栈和链式栈
1、其结构如下图所示:
2、栈的基本操作,只有如下的七个(具体用法)
- #include<iostream>
- #include<stack>
- #include<string>
-
- using namespace std;
-
- void StackOperator(int num)
- {
- stack<int> s1;
- for (int i = 0; i < num; i++)
- {
- s1.push(i); // 入栈操作
- }
-
- cout << "s1栈的大小为:" << s1.size() << endl;
-
- // 遍历栈中的元素
- while (!s1.empty())
- {
- // 将栈顶的元素输出
- cout << s1.top() << " ";
- // 将当前栈顶的元素删除,让下一个元素成为栈顶元素
- s1.pop();
- }
- cout << endl;
- }
-
-
- int main()
- {
- StackOperator(10);
-
- cin.get();
- }

3、注意:栈与vector容器的异同
1、链式栈是用链表的方式来进行连接的。如下图所示,pTop 指向开头,pBotton 指向结尾。一般为了处理方便,让 pBotton 指向一个空结点,即最后一个结点的数据为空。
2、创建一个链式栈
(1)、创建栈的第一个结点,并用 pTop、pBotton 来对其进行初始化。此时 pTop、pBotton 均指向该栈的第一个结点。
- // 创建栈的第一个结点,并用头指针和尾指针指向它
- void InitStack(PSTACK p)
- {
- // 使用malloc动态申请一个NodeList类型的内存空间,并用pTop指针指向它
- p->pTop = (PNODE)malloc(sizeof(NODE));
- if (p->pTop==NULL)
- {
- cout << "内存分配失败" << endl;
- }
- else
- {
- p->pBotton = p->pTop;
-
- p->pTop->next = NULL;
- }
- }

(2)、将第一个元素压入到栈中,成为该栈的第二个结点
- // 将元素压入到创建的栈中
- void PushElem(PSTACK p1,int val)
- {
- PNODE pNew = new NODE();
- pNew->data = 20;
- pNew->next = p1->pTop;
- p1->pTop = pNew;
- }
(3)、将第三、四个元素分别压入到栈中,如下图
3、实例
- #include<iostream>
- #include<malloc.h>
- #include<string>
-
- using namespace std;
-
- // 定义一个结点
- // NODE 相当于 NodeList的别名
- // *PNODE 相当于 NodeList* 类型
- typedef struct NodeList
- {
- int data;
- NodeList * next;
- }NODE, *PNODE;
-
- //自定义一个栈的结构体类型,存放头指针和尾指针
- typedef struct Stack
- {
- PNODE pTop;
- PNODE pBotton;
- }STACK, *PSTACK;
-
- // 创建栈的第一个结点,并用头指针和尾指针指向它
- void InitStack(PSTACK p)
- {
- // 使用malloc动态申请一个NodeList类型的内存空间,并用pTop指针指向它
- p->pTop = (PNODE)malloc(sizeof(NODE));
- if (p->pTop==NULL)
- {
- cout << "内存分配失败" << endl;
- }
- else
- {
- p->pBotton = p->pTop;
-
- p->pTop->data = 10;
- p->pTop->next = NULL;
- }
- }
-
- // 将元素压入到创建的栈中
- void PushElem(PSTACK p1,int val)
- {
- // 方法二
- PNODE pNew = new NODE();
- pNew->data = val;
- pNew->next = p1->pTop;
- p1->pTop = pNew;
- }
-
- // 遍历栈中所有元素
- void TraverseStack(const PSTACK pS)
- {
- PNODE p = pS->pTop;
- while (p!=pS->pBotton)
- {
- cout << p->data << endl;
- p = p->next;
- }
- }
-
- // 出栈操作,删除栈顶的元素
- void PopStack(PSTACK pS)
- {
- PNODE p = pS->pTop;
- pS->pTop = pS->pTop->next;
- delete p;
- }
-
-
- int main()
- {
- STACK s;
- InitStack(&s);
- PushElem(&s, 10);
- PushElem(&s, 20);
- PushElem(&s, 30);
- PushElem(&s, 40);
-
- TraverseStack(&s);
- cout << "-------------------------------\n";
-
- PopStack(&s);
- TraverseStack(&s);
-
- cin.get();
- }

运行结果如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。