c++ 顺序存储和链表存储 栈的实现代码
2015-09-11 14:36
531 查看
#include<iostream> #include "malloc.h" using namespace std; #define Order #ifdef Order #define Max 100 typedef struct linknode { int top; int data[Max]; }Stack; void InitStack(Stack * &s) { cout<<"数组"<<endl; s = (Stack*)malloc(sizeof(Stack*)); s->top = -1; } void clearStack(Stack * &s) { free(s); s = NULL; } int StackLength(Stack * &s) { return (s->top+1); } int StackEmpty(Stack * &s) { if(s->top==-1) return 1; else return 0; } int Push(Stack * &s,int i) { if(s->top+1>=Max) return 0; else { s->data[++(s->top)] = i; return 1; } } int Pop(Stack * &s,int i) { if(s->top==-1) return 0; else return s->data[(s->top)--]; } int GetTop(Stack * &s,int i) { if(s->top==-1) return 0; else return s->data[s->top]; } void DispStack(Stack * &s) { for(int i = s->top;i>=0;i--) { cout<<s->data[i]; } } #else typedef struct linknode { int data; struct linknode *next; }Stack; void InitStack(Stack * &s) { cout<<"链表"<<endl; s = (Stack*)malloc(sizeof(Stack*)); s->next = NULL; } void clearStack(Stack * &s) { Stack *p=s->next;Stack *q = p; while(p != NULL) { free(p); p = q->next; q = p; } } int StackLength(Stack * &s) { int len = 0; Stack *p = s; while(p->next != NULL) { ++len; p = p->next; } return len; } int StackEmpty(Stack * &s) { if(s->next == NULL) return 1; else return 0; } int Push(Stack * &s,int i) { Stack *node = (Stack*)malloc(sizeof(Stack*)); node->data = i; node->next = s->next; s->next = node; } int Pop(Stack * &s,int i) { if(s->next == NULL) return 0; else { Stack *p = s->next; s->next = p->next; i = p->data; free(p); return 1; } } int GetTop(Stack * &s,int i) { if(s->next == NULL) return 0; else return s->next->data; } void DispStack(Stack * &s) { Stack *p =s; while(p->next != NULL) { cout<<p->next->data; p= p->next; } } #endif int main() { int n; cout<<"请输入目前的操作 1:初始化栈 2:销毁栈 3:栈的长度 4:栈是否为空 5:进栈 6:出栈 7:取栈顶元素 8:显示栈中元素"<<endl; Stack *s = NULL; while(cin>>n) { switch(n) { case 1: { InitStack(s); break; } case 2: { clearStack(s); break; } case 3: { cout<<StackLength(s); break; } case 4: { cout<<StackEmpty(s); break; } case 5: { int i; cin>>i; Push(s,i); break; } case 6: { int i; cout<<Pop(s,i); break; } case 7: { int i; cout<<GetTop(s,i); break; } case 8: { if(s!= NULL) DispStack(s); break; } default:break; } } return 0; }
相关文章推荐
- C++ <替换字符串中的数字>
- C++多个文本读取问题
- 【C++专题】static_cast, dynamic_cast, const_cast探讨
- 在64位机子调用vs编写的win32 c++程序遇到问题
- C++ <统计单词数及单个字母出现次数>
- [iOS学习]C语言:乘法表效果使用for循环输出
- 关于C语言中返回局部变量和局部指针变量
- C++11带来的优雅语法
- 如何在C++代码中连接QML代码中的信号
- c++ list, vector, map, set 区别与用法比较
- [转]关于C与C++中互相调用动态链接库的问题_卓越李子_新浪博客
- C++ 资源表
- 第二周项目1——c/c++语言中函数参数传递的三种方式
- Item 25:考虑实现一个不抛异常的swap Effective C++笔记
- C语言中auto,register,static,const,volatile的区别详细解析
- C++类模板的使用-排序
- C++ Primer的课后规划问题的第八章
- C语言程序变异的内存分配
- C++基础学习
- C++学习笔记1(带参数的main( )函数)