您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: