栈的源代码C/C++实现
来源:互联网 发布:阳西县网络问政 编辑:程序博客网 时间:2024/05/21 13:54
// StackFor.cpp : 定义控制台应用程序的入口点。
//visual studio 2013
//栈顺序存储表示#include "stdafx.h"
#include "iostream"
#define MAX 23
//初始化Stack的大小
#define STACK_INIT_SIZE 10
//每次Stack容量不够的时候,增加分配的大小
#define STACK_INCREMENT 2
#define ok 1
using namespace std;
struct SqStack{
int *top;
int *base;
int stacksize;//当前已经分配的内存空间
};
//初始化Stack
int InitStack(SqStack &stack)
{
if (!(stack.base = (int*)malloc(STACK_INIT_SIZE*sizeof(int))))
{
cout << "初始化ERROR" << endl;
exit(OVERFLOW);
}
cout << "Stack初始化成功" << endl;
stack.top = stack.base;
stack.stacksize = STACK_INIT_SIZE;
return ok;
}
//销毁Stack
int DestroyStack(SqStack &stack)
{
free(stack.base);
stack.base = NULL;
stack.top = NULL;
stack.stacksize = 0;
return ok;
}
//清空栈
int ClearStack(SqStack &stack)
{
stack.base = stack.top;
return ok;
}
//看Stack是否为空
void IsEmptyStack(SqStack stack)
{
if (stack.base == stack.top)
{
cout << "Stack is empty" << endl;
}
else{
cout << "Stack is not empty" << endl;
}
}
//返回Stack的长度
int StackLength(SqStack stack)
{
return stack.top - stack.base;
}
//得到栈顶元素
int GetTopStack(SqStack stack,int &topElem)
{
if (stack.top > stack.base)
{
topElem = *(stack.top - 1);
return true;
}
return false;
}
//把元素压栈
int PushStack(SqStack &stack, int pushElemment)
{
if ((stack.top - stack.base) >= stack.stacksize)//栈满,追加空间
{
stack.base = (int*)realloc(stack.base, (stack.stacksize + STACK_INCREMENT)*sizeof(int));
if (!stack.base)
{
exit(OVERFLOW);//存储分配失败
}
stack.top = stack.base + stack.stacksize;
stack.stacksize += STACK_INCREMENT;
}
*(stack.top)++ = pushElemment;
cout << *(stack.top-1) << endl;
return ok;
}
//元素出栈
int PopStack(SqStack &stack, int &popElemment)
{
if (stack.base==stack.top)
{
return false;
}
else
{
popElemment = *--stack.top;
}
return ok;
}
int _tmain(int argc, _TCHAR* argv[])
{
SqStack stack;
int elem;
InitStack(stack);
for (int i = 0; i < MAX; i++)
{
PushStack(stack, i);
}
int stackLength = StackLength(stack);
cout << "栈的长度:" <<stackLength << endl;
GetTopStack(stack, elem);
cout << "栈顶:" << elem << endl;
cout << "栈是否为空:" << endl;
IsEmptyStack(stack);
//以下是出栈操作
int popElemment;
for (int i = 0; i < stackLength; i++)
{
PopStack(stack, popElemment);
cout << popElemment << endl;
}
int popElem;
GetTopStack(stack, popElem);
cout << "栈顶:" << popElem << endl;
cout << "栈是否为空:" << endl;
IsEmptyStack(stack);
system("pause");
return 0;
}
可能有些地方有buf,我测试了一部分,如若找出bug 请联系我,谢谢!!!
1 0
- 栈的源代码C/C++实现
- C++|单链表的实现源代码
- 实现类似ping功能的C源代码
- 数据结构中单链表的实现+单链表的C语言实现源代码
- C源代码的例子
- C库源代码实现: strtok
- c实现生产者消费者源代码
- RTree源代码-c语言实现
- 数据结构中栈的实现+栈的C语言实现源代码
- linux下C实现线程池的源代码
- 10个重要的算法C语言实现源代码
- 标C函数itoa实现的源代码[增强版]
- c实现的读大文件方法(源代码)
- C 标准库 函数 源代码的实现 和 分析
- 10个重要的算法C语言实现源代码
- c#serialport类实现串口通信的源代码
- 10个重要的算法C语言实现源代码
- 10个重要的算法C语言实现源代码
- Swizzling钩子
- C语言中的关键字
- gcc 和 gdb简介
- java 导出Excel
- 从n到m,有-1和*2两种操作。问最少走几步
- 栈的源代码C/C++实现
- mac jdk原因导致 maven命令无法执行
- 【BZOJ4034】T2,树链剖分练习
- 使用NDK生成native C/C++的可执行程序
- 高精度减法
- Exynos4412 中断处理流程详解
- 监听滚动window.onscroll scrlltop被卷去的头部
- 删除链表中重复的结点
- 安卓自定义组件及其操控