堆栈初体验2

/*本实例需要在labwindows CVI工具下运行*/

#include <ansi_c.h>

#include <cvirte.h>        
#include <userint.h>
#include "duizhanC.h"

static int panelHandle;
#define MaxStackSize 100
typedef int DataType;  //记住不要写成了 #define
typedef struct  
{
    DataType stack[MaxStackSize];
    int top;
} SeqStack;

int main (int argc, char *argv[])
{
    if (InitCVIRTE (0, argv, 0) == 0)
        return -1;    /* out of memory */
    if ((panelHandle = LoadPanel (0, "duizhanC.uir", PANEL)) < 0)
        return -1;
    DisplayPanel (panelHandle);
    RunUserInterface ();
    DiscardPanel (panelHandle);
    return 0;
}

void inistack(SeqStack *s)
{
  s->top=-1;
}

int empty(SeqStack s)//n判栈空操作
{
  if(s.top==-1)
     return 1;
  else
    return 0;
}


int push(SeqStack *s,DataType x)//n入栈
{
    if (s->top==MaxStackSize-1)     //判断栈满?
    {
        printf("\nStack is full");
        return 0;
    }
    s->top++;          //栈顶下标加1
    s->stack[s->top]=x;   //入栈
    return 1;
}

int pop(SeqStack *s)//n出栈
{
    int return_val;
    if(s->top==-1)     //判断栈空?
  {
     printf("\n Stack is empty!");
     return -1;
   }
  else
  {
     return_val= s->stack[s->top];     //元素出栈
     (s->top)--;           //栈顶下标减1
     printf("pop出来的数据是:%d\n",return_val);   
     return return_val;
   }
}
int gettop(SeqStack *s,DataType *d)//n取栈顶元素
{
  if(s->top==-1)
  {
    printf("\nStack is empty!");
    return 0;
  }
  else
  {
    *d=s->stack[s->top];
    return 1;
  }
}

//    遍历栈的函数
void TraverseStack(SeqStack *s)
{
    int i;
    printf("栈的数据为:");
    for(i= s->top; i>-1; i--)                //    只要栈顶不等于栈底,循环
    {
        printf("%d ",s->stack[i]);            //    打印栈顶的成员member
    }
    printf("\n");  
    return ;
}



int CVICALLBACK StartCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    int data,num,i,pop_data;
    SeqStack s;
    
    switch (event)
    {
        case EVENT_COMMIT:
            inistack(&s);
            printf("输入几个数据:");
            scanf("%d",&num);
            for (i = 0;i < num;i++)
            {
                printf("第 %d 个数:",i+1);
                    scanf("%d",&data);
                if (push(&s,data))                //    调用Push函数
                   {
                        continue;
                }
                    else
                {
                        printf("进行进栈操作失败!\n");
                        exit(-1);
                }
                }
            TraverseStack(&s);
            
            //printf("需要pop出几个数据:");
            //scanf("%d",&data);
            while(!empty(s))
            {
                pop_data= pop(&s);
                //printf("您去掉的数据是:%d\n",pop_data);
            }    
            TraverseStack(&s);  
            //printf("清空栈");
        
            
            break;
    }
    return 0;
}

int CVICALLBACK StopCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_COMMIT:

            break;
    }
    return 0;
}

int CVICALLBACK QuitCallback (int panel, int control, int event,
        void *callbackData, int eventData1, int eventData2)
{
    switch (event)
    {
        case EVENT_COMMIT:
            QuitUserInterface (0);
            break;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值