顺序栈是一种特殊的顺序表,主要操作是入栈和出栈。将顺序表加一些特定限制,就成了顺序栈。

注:

1.顺序栈C语言实现;

2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善;

3.提供几个简单函数,可自行添加功能;

4.可用C++封装。

顺序栈容量

#define CAPACITY 20 //容量

顺序栈结构体

typedef struct
{
int *m_pHead; //指向数组头
int m_iTop; //栈顶
int m_iCapacity; //容量
}SStack;

核心操作入栈出栈

SStack* createStack();
void push(SStack *pStack, int iElement);
int pop(SStack *pStack);
void showStack(SStack *pStack);
void releaseMem(SStack* pStack);

创建顺序栈

SStack* createStack()
{
SStack *pStack = (SStack*)malloc(sizeof(SStack));
if(!pStack)
{
printf("动态内存分配失败!\n");
return pStack;
} pStack->m_pHead = (int*)malloc(sizeof(int) * CAPACITY);
if(!pStack->m_pHead)
{
printf("动态内存分配失败!\n");
return NULL;
} pStack->m_iTop = -;
pStack->m_iCapacity = CAPACITY; return pStack;
}

入栈

void push(SStack *pStack, int iElement)
{
if(!pStack || !pStack->m_pHead)
{
printf("顺序栈不存在!\n");
return;
} if(pStack->m_iTop == pStack->m_iCapacity - )
{
printf("顺序栈已满!\n");
return;
} pStack->m_pHead[++pStack->m_iTop] = iElement;
}

出栈

int pop(SStack *pStack)
{
if(!pStack || !pStack->m_pHead)
{
printf("顺序栈不存在!\n");
return -;
} if(pStack->m_iTop < )
{
printf("顺序栈元素个数为0!\n");
return -;
} return pStack->m_pHead[pStack->m_iTop--];
}

打印

void showStack(SStack *pStack)
{
if(!pStack || !pStack->m_pHead)
{
printf("顺序栈不存在!\n");
return;
} printf("容量:%d,栈顶:%d,打印元素:\n", pStack->m_iCapacity, pStack->m_iTop);
for(int i = ; i <= pStack->m_iTop; i++)
printf("%d ", pStack->m_pHead[i]); printf("\n");
}

释放内存

void releaseMem(SStack* pStack)
{
if(!pStack)
{
printf("顺序栈不存在!\n");
return;
} if(pStack->m_pHead)
free(pStack->m_pHead); free(pStack);
printf("内存释放成功!\n");
}

最新文章

  1. silverlight 4.0 的oob模式下,调用com通过wmi重启自身进程 killself
  2. Spring第一天
  3. windows下使用TortoiseGit代替Git命令行操作
  4. 《OD大数据实战》Hadoop伪分布式环境搭建
  5. [POJ3352]Road Construction(缩点,割边,桥,环)
  6. 【applicationContext.xml】配置文件找不到
  7. javascript BOM对象 第15节
  8. cf509A Maximum in Table
  9. poj 1037 A decorative fence
  10. [转]laravel 4之视图及Responses
  11. (原)ubuntu16中安装moses
  12. 利用monkeyrunner实现Android屏幕连续截图
  13. WEB中调用Nutch执行JOB抓取
  14. 第5章 子网划分和CIDR
  15. windows2008 转 centos7 数据磁盘NTFS无损挂载
  16. 关于 redis的操作
  17. Android TextView的属性设置为textstyle=&quot;bold&quot;时 中文的“¥”不显示
  18. php中memcached的使用
  19. C# 中委托和代理是一个概念吗??
  20. Logback 整合 RabbitMQ 实现统一日志输出

热门文章

  1. 【luogu P3369 【模板】普通平衡树(Treap/SBT)】 题解 pb_ds
  2. Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出
  3. Android学习笔记_4_单元测试
  4. 【Linux-CentOS】【转-更正】使用CentOS DVD1 和DVD2做本地yum源
  5. 用c#语言编写水仙花数
  6. 轻量ORM-SqlRepoEx (四)INSERT、UPDATE、DELETE 语句
  7. JavaScript实现Tab切换
  8. AES加密工具
  9. js实现前端的搜索历史记录
  10. Java学习笔记一:三步搭建Java开发环境