C语言栈新手入门模板示例

栈的新手入门示例
作为代码新手可以参考的一个栈的模板示例,今天刚刚学到,作文笔记发在博客上

#include<stdio.h>
#include<stdlib.h>

// 创建盏
// 压入盏
// 取出盏
// 打印
// 清空


// 建立一个盏的类型方便区分
typedef int node;
//建立三个指针,分别为盏首,盏尾,盏记录轨迹指针
node * pStack = NULL;
node * pStackRear = NULL;
node * pStackCurrentNode = NULL;

// 建立盏空间,返回盏首指针
node * CreateStack(node pdata){
    // 申请一段盏的内存,用来存储
    pStack = (node *)malloc(sizeof(node)*pdata);
    //将记录指针和盏尾的指针指向内存另一头,和盏首区分开来开辟出空间,
    // 记录指针将在盏头盏位中间游走
    pStackCurrentNode = pStackRear = pStack + (pdata - 1);
    return pStack;
}

//压入数据操作
void  pushStack(int pdata){
    //记录指针指向空值时,表示盏已满
    if(pStackCurrentNode == NULL){
        printf("盏满了,不能再加了!\n");
        return;
    }
    //如果未指向空,那么记录指针的当前空间存入当前数据
    *pStackCurrentNode = pdata;
    //如果记录指针和盏首相等,表示当下已经刚好存满,
    //便将记录指针指向空值,下一次就不再读取
    if(pStackCurrentNode == pStack)
    {
        pStackCurrentNode = NULL; 
        return;
    }
    else
    {   //否则记录指针继续向下走,存储数据
        pStackCurrentNode--;
    }
   
}
//读盏操作
node outStack(){
    //如果记录指针和盏尾指针相等,表示记录指针没有走动
    //或者已经返回,数据已经读取完,盏已经空了
    if(pStackCurrentNode == pStackRear)
    {
        printf("盏都空了,还取呢啊?\n");
        return -1;
    }
    else
    {   //如果记录指针为空,那么表示盏是满的
        //将记录指针重新指向盏首,将值返回就好  
        if(pStackCurrentNode == NULL){
            pStackCurrentNode = pStack;
            return *pStackCurrentNode;
        }
        else
        {   //记录指针向上走,返回指针值进行出盏操作
            pStackCurrentNode++;
            return *pStackCurrentNode;
        }
    }
}
//正向打印值,验证数据
void printStack(){
    node * p = pStack;
    while (p != pStackCurrentNode)
    {   
        printf("%d",*p);
        p--;
        /* code */
    }
    //栈重置
 void empytStack(){
    pStackCurrentNode = pStackRear;
}
    
}
void main(){
    CreateStack(10);
    pushStack(10);
    pushStack(8);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    pushStack(3);
    for (int i = 0; i < 10; i++)
    {
      printf("%d\n",outStack()) ; /* code */
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值