C语言栈的使用

1.顺序存储结构

#include<stdio.h>  

#include<stdlib.h>  
  
#define N 10  
  
typedef struct _Stack 
{  
    int top;//记录栈中有多少个元素,后面的data[top]表示栈顶  
    int data[N];  
}stack;  
  
stack mystack= { -1,{0} };//-1代表栈中没有元素,{0}将数组全部初始化为0  
/*
判断栈是否为空,主要看stack中top的值,初始化时是一个空栈,top=-1 
返回值:为1表示空栈,为0表示不是空栈 
*/ 
int isempty() 
{  
    if(mystack.top==-1) 
{  
        return 1;  
    } 
else 
{  
        return 0;  
    }  
}  
//设置栈为空  
void setempty() 
{  
    mystack.top=-1;  
}  
/*
压入一个数据,成功返回1,失败返回0(栈溢出)
在入栈之前需要判断会不会导致栈溢出  
*/ 
int push(int data) 
{  
    if(mystack.top+1<=N-1)
    {  
        mystack.data[++mystack.top]=data;  
        return 1;  
    } 
else 
{  
        return 0;  
    }  
}  
/*
出栈,首先要判断是否为空栈,如果为空直接返回
不为空,从栈顶返回一个元素
*/ 
int pop() 
{  
    if(isempty()) 
{  
        return -1;//为空,返回-1   
    } 
else 
{  
        return mystack.data[mystack.top--];  
    }  
  
}   
int  main()
{  
  int a[10]; 
  int i=0; 
  for(i=0;i<10;i++)
  {  
      a[i]=i;  
  }  
  for(i=0;i<10;i++)
  {  
      push(a[i]);//压人数据   
  }  
  while(isempty()!=1)
  {  
    printf("%d\n",pop());  
  }   
    return 0; 

}  


2.链式存储结构

#include "stdafx.h"
#include <iostream>
#include <exception>
using namespace std;


//栈的链式存储结构及实现
//栈的结构定义
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int sElemType;
typedef int Status;




typedef struct StackNode
{
    sElemType data;
    struct StackNode *next;
}StackNode,*LinkStackPtr;


typedef struct LinkStack
{
    LinkStackPtr top;
    int count;
}linkStack;


//栈空
Status StackEmpty(LinkStack *S)
{
    if(S->count == 0)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }


}
//入栈
Status Push(LinkStack *S,sElemType e)
{
    LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
    s->data = e;
    s->next = S->top;
    S->top = s;
    S->count++;
    return OK;
}
//出栈
Status Pop(LinkStack *S,sElemType *e)
{
    if(StackEmpty(S))
    {
        cout<<"栈空"<<endl;
        return ERROR;
    }
    LinkStackPtr p = S->top;
    S->top = p->next;
    *e = p->data;
    free(p);
    S->count--;
    return OK;
}




int _tmain(int argc, _TCHAR* argv[])
{
    int pushElem = 2;
    linkStack *linkSt=(linkStack*)malloc(sizeof(LinkStack));
    linkSt->count=0;
    Push(linkSt,pushElem);//将2入栈
    pushElem = 3;
    Push(linkSt,pushElem);//将3入栈
    int popElem = 0;
    Pop(linkSt,&popElem);//出栈,结果输出给popElem
    cout<<popElem<<endl;//输出 出栈的元素
    Pop(linkSt,&popElem);//出栈,结果输出给popElem
    cout<<popElem<<endl;//输出 出栈的元素
    Pop(linkSt,&popElem);//出栈,没有元素了.栈空
    return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值