链式栈的创建及操作

本文介绍了栈的概念,栈的存储结构以及通过链式结构实现栈的过程。首先,阐述了栈的先进后出特性,并通过叠衣服的例子进行解释。接着,详细展示了如何使用C语言创建链式栈的节点结构体、创建节点、创建栈结构体以及实现栈的基本操作,包括入栈、获取栈顶元素、出栈和判断栈是否为空。代码实现清晰易懂,适合初学者学习和参考。
摘要由CSDN通过智能技术生成

链式实现栈及基本操作

1.在完成栈的实现前,我们先来了解什么是栈,栈的存储结构又是什么,举一个简单的例子来了解什么是栈吧,现实生活中我们通常会叠衣服,是不是我们先叠的衣服最后才能拿出来,而后叠的衣服最先拿出来,而栈就是这种先进后出,后进先出的数据结构
栈又由数组和链式两种方式
以下是数组和链式栈的实现原理
数组形式的栈:
在这里插入图片描述

链式栈:
在这里插入图片描述
2.了解了栈是什么之后,我们用代码来实现栈
(1)首先创建结点结构体变量

struct Node
{
    int data;          //数据域
    struct Node *next;  //指针域
};

(2)创建结点

struct Node* creatNode(int data)
{  
  //通过动态内存申请为指针变量构造空间
  struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
  //初始化结点
  newNode->data=data;
  newNode->next=NULL;
  return newNode;
}

(3)创建栈结构体变量

struct stack
{
  struct Node* stackTop;   //栈顶指针
  int size;                //栈中元素的个数
};

(4)创建栈

struct stack* creatstack()
{  
//创建栈首结点
  struct stack* myStack = (struct stack*)malloc(sizeof(struct stack));
  //初始化栈
  myStack->stackTop=NULL;
  myStack->size=0;
  return myStack;
}

栈的创建到此基本上已经完成了,接下来我们来实现栈的基本操作
1.入栈
入栈我们可以理解为表头法插入结点

void push(struct stack* myStack,int data)
{  
  //调用创造结点函数
  struct Node* newNode = creatNode(data);
  newNode->next=myStack->stackTop;
  myStack->stackTop=newNode;
  myStack->size++;        //栈元素加一
}

2.获取栈顶元素

int top(struct stack* myStack)
{
  if(myStack->size ==NULL)
  { 
    printf("栈为空,无法获取\n");
    system("pause");
    return myStack->size;
  }
  return myStack->stackTop->data;
}

3.出栈

void pop(struct stack* myStack)
{
  if(myStack->size==0)
  { 
   printf("栈为空,无法出栈");
   return myStack->size
  }
  //找到第二级
  struct Node* nextNode=myStack->stackTop->next;
  free(myStack)
   //出栈之后第二级变为栈顶
  myStack->stackTop=nextNode;
  //栈中元素减一
  myStack->size--;
}

4.判断是否为空栈的函数

 int empty(struct stack* myStack)
 {
     if(myStack->size==0)
        return 0;
      return 1;
 }

栈的基本操作已经完成,栈的创建与链表的创建过程及其的相似,读者可以对比以下相似在哪,若有什么错误希望指出修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值