重新教自己学算法之线性堆栈(八)
2015-05-24 22:19
316 查看
#include <iostream> #include <cstdlib> #include <cassert> #include <cstring> using namespace std; #define STATUS int #define TRUE 1 #define FALSE 0 typedef struct _STACK_NODE { int* pData; int length; int top; }STACK_NODE; STACK_NODE* alloca_stack(int number) { STACK_NODE* pStackNode = NULL; if(0 == number) return NULL; pStackNode = (STACK_NODE*)malloc(sizeof(STACK_NODE)); assert(NULL != pStackNode); memset(pStackNode, 0, sizeof(STACK_NODE)); pStackNode->pData = (int*)malloc(sizeof(int) * number); if(NULL == pStackNode->pData) { free(pStackNode); return NULL; } memset(pStackNode->pData, 0, sizeof(int) * number); pStackNode->length = number; pStackNode->top = 0; return pStackNode; } STATUS free_stack(STACK_NODE* pStackNode) { if(NULL == pStackNode) return FALSE; assert(NULL != pStackNode->pData); free(pStackNode->pData); free((void*)pStackNode); return TRUE; } STATUS stack_push(STACK_NODE* pStackNode, int value) { if(NULL == pStackNode) return FALSE; if(pStackNode->length == pStackNode->top) return FALSE; pStackNode->pData[pStackNode->top++] = value; //后自增,先使用在自增 return TRUE; } STATUS stack_pop(STACK_NODE* pStackNode, int* value) { if(NULL == pStackNode || NULL == value) return FALSE; if(0 == pStackNode->top) return FALSE; *value = pStackNode->pData[-- pStackNode->top]; //先自减,再运算 return TRUE; } int const_stack_number(const STACK_NODE* pStackNode) { return pStackNode->top; } void output_stack(const STACK_NODE* pStackNode) { for (int i = 0; i < pStackNode->length; ++i) { cout<<pStackNode->pData[i]<<" "; } cout<<endl; } int main() { STACK_NODE* pStackNode = alloca_stack(3); cout<<const_stack_number(pStackNode)<<endl;; //0 stack_push(pStackNode, 20); stack_push(pStackNode, 15); output_stack(pStackNode); //20,15,0 stack_push(pStackNode,30); cout<<const_stack_number(pStackNode)<<endl; // 3 output_stack(pStackNode); //20,15,30 stack_push(pStackNode,45); output_stack(pStackNode); //栈已满 20 15 30 int* number; stack_pop(pStackNode,number); cout<<*number<<endl; // 30 output_stack(pStackNode); stack_push(pStackNode,45); //20,15,45 output_stack(pStackNode); cout<<const_stack_number(pStackNode)<<endl; //3 cout<<pStackNode->pData<<endl; //0x4d24b0 cout<<&(pStackNode->pData[0])<<endl; //0x4d24b0 cout<<&(pStackNode->pData[1])<<endl; //0x4d24b4 cout<<(pStackNode->pData + 2)<<endl; //0x4d24b8 }
相关文章推荐
- 重新教自己学算法之线性队列(七)
- 一步一步写算法(之线性堆栈) (转)
- 一步一步写算法(之线性堆栈)
- 重新教自己学算法之非递归排序——冒泡-插入-排序(三)
- 重新教自己学算法之循环-递归(二)
- 一步一步写算法(之线性堆栈)
- 重新教自己学算法之递归排序——快速排序(四)
- 重新教自己学算法之单向链表(九)
- 重新教自己学算法之图的最短路(十二)
- 重新教自己学算法之单词统计(状态机)(十)
- 重新教自己学算法之递归排序——堆排序(六)
- 自己做的demo---c语言的基本语法,过阵子可以重新写一些算法跟数据结构了
- 一步一步写算法(之线性堆栈)
- 重新教自己学算法之递归排序——合并排序(五)
- 最长连续子序列和的线性算法及其他算法
- 查找算法之线性表查找
- 数据结构与算法问题 堆栈使用 2011年吉林大学计算机研究生机试真题
- Leetcode 448 线性时间算法
- 自己琢磨的 图像相似度算法 JAVA版实现
- 线性表--算法设计题2.23