今天看了一下栈的应用,栈分为两种:顺序栈(也就是数组构成的)和链栈(也即是链表构成的),栈为何物我就不罗嗦了,先来介绍一下顺序栈吧
顺序栈的定义
typedef struct
{
int stack[max];
int top;
}seqstack;
seqstack *s;
所谓的顺序栈就是用一个数组作为栈,用一个top 元素作为栈顶,这些都是我们规定的,当然有更好的方法也是可以的
题目:通过顺序栈模拟扑克牌游戏
思路:用随机数生成扑克牌数,再采用类似于桶排序的标记法,用一个数组,发过牌的记为1,还没有的记为0。然后………
代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define max 100
typedef struct
{
int stack[max];
int top;
}seqstack;
void stackIn(seqstack *s)
{
s->top=-1;
}
int stackNotEmpty(seqstack s)
{
if(s.top<=-1)
return 0;
else return 1;
}
int stackpush(seqstack *s,int x)
{
if(s->top>=max)
{
printf("堆栈已满无法插入\n");
return 0;
}
else
{
s->top++;
s->stack[s->top]=x;
return 1;
}
}
int stackpop(seqstack *s,int *d)
{
if(s->top<=-1)
{
printf("堆栈数据已空\n");
return 0;
}
else
{
*d=s->stack[s->top];
s->top--;
return 1;
}
}
int main()
{
seqstack stack;
int i;
time_t t;
int y,z;
int card[52],pos;
stackIn(&stack);
if(stackNotEmpty(stack)==0)
printf("堆栈为空\n");
else printf("\n栈非空");
srand((unsigned)time(&t));
for(i=0;i<52;i++)
card[i]=0;
i=0;
while(i!=52)
{
pos=rand()%52;
if(card[pos]==0)
{
stackpush(&stack,pos);
card[pos]=1;
i++;
}
}
for(i=0;i<5;i++)
{
stackpop(&stack,&z);
printf("[%c%2d]",z/13+3,z%13+1);
stackpop(&stack,&z);
printf("[%c%2d]",z/13+3,z%13+1);
stackpop(&stack,&z);
printf("[%c%2d]",z/13+3,z%13+1);
printf("\n");
}
return 0;
}
总结
此次顺序栈的应用,虽然代码比价简短,但是确实一个十分好的例子,当然啦这都要归功于顺序栈相对容易理解一些