数据结构之顺序栈的应用

来源:互联网 发布:mac osx10.13镜像下载 编辑:程序博客网 时间:2024/06/08 16:08

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

顺序栈的定义

typedef struct{    int stack[max];    int top;}seqstack;seqstack *s;

所谓的顺序栈就是用一个数组作为栈,用一个top 元素作为栈顶,这些都是我们规定的,当然有更好的方法也是可以的

题目:通过顺序栈模拟扑克牌游戏
思路:用随机数生成扑克牌数,再采用类似于桶排序的标记法,用一个数组,发过牌的记为1,还没有的记为0。然后………

代码

#include<stdio.h>#include<time.h>#include<stdlib.h>#define max 100typedef 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;}

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

原创粉丝点击