标签:数据 输出 href tac 去掉 number head 数组 iostream
栈(stack)是限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。
栈又称为后进先出(LastIn First Out)的线性表,简称LIFO结构。
栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶,而不是栈底。
堆叠数据结构使用两种基本操作:推入(push)和弹出(pop):
堆栈可以用链表和数组两种方式实现,一般为一个堆栈预先分配一个大小固定且较合适的空间并非难事,所以较流行的做法是Stack
结构下含一个数组。
如果空间实在紧张,也可用链表实现,且去掉表头。这里是以数组实现的。
代码:
//阵列堆叠
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstdbool>
using namespace std;
struct stack
{
int map[10];//开辟空间
int top;
};
bool empty(struct stack *s)//判断栈空
{
return s->top==0;
}
void push(struct stack *s,int x)
{
s->top=s->top+1;
s->map[s->top]=x;
}
int pop(struct stack *s,int i)
{
if(empty(s))
{
return 0;
}
else
{
while(i--)
{
s->top=s->top-1;
}
return s->map[s->top+1];
}
}
int show(struct stack *s)
{
for(int i=1;i<=s->top;i++)
{
cout<<s->map[i]<<" ";
}
cout<<endl;
return 0;
}
int main()
{
stack s;
s.top=0;//栈顶归零
cout<<"1:push 2:pop 3:show"<<endl;
while(1)
{
char a;
cin>>a;
switch(a)
{
case ‘1‘:
{
cout<<"The number of numbers to insert:";
int num;
cin>>num;
int t;
for(int i=0;i<num;i++)
{
cin>>t;
push(&s,t);
}
break;
}
case ‘2‘:
{
cout<<"The number of numbers to be deleted:";
int num;
cin>>num;
pop(&s,num);
break;
}
case ‘3‘:
{
show(&s);
break;
}
}
}
return 0;
}
今天也是元气满满的一天!good luck!
标签:数据 输出 href tac 去掉 number head 数组 iostream
原文地址:http://www.cnblogs.com/cattree/p/7534821.html