数据结构之顺序栈的应用

今天看了一下栈的应用,栈分为两种:顺序栈(也就是数组构成的)和链栈(也即是链表构成的),栈为何物我就不罗嗦了,先来介绍一下顺序栈吧

顺序栈的定义

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;
}

总结
此次顺序栈的应用,虽然代码比价简短,但是确实一个十分好的例子,当然啦这都要归功于顺序栈相对容易理解一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值