栈操作-链表实现(C语言)

简介: 栈操作-链表实现(C语言)

栈是一种先进后出(FILO)的数据结构。举例:我们打开一些网页,然后又关闭了几个,而当我们想要恢复之前看过的网页时,会点击恢复网页按钮,那么最先被我们关闭的网页,最后被恢复出来。


栈有两种实现方式,一种是数组实现,a[top],top指向栈顶,栈空时top为-1,每次加入元素时,top值加1,并赋值a[top]。实现简单,这里就不详细叙述了。


//

//入栈
int push(int* a, int top, int ele)
{
  a[++top] = ele;
  return top;
}
int pop(int* a, int top)
{
  if(top == -1)
    return -1;
  printf("pop element is %d\n", a[top--]);
  return top;
}

第二种是链表实现。开始栈顶head元素为空。插入一个元素后,该元素的next 节点指向head,然后将该元素置位新的head元素。 直接贴代码和运行结果。运行环境vs2010.

微信图片_20230116213058.png


//链表实现栈操作
typedef struct lineStack{
  int data;
  lineStack *next;
}lineStack;
//入栈
lineStack *  push(lineStack *stack, int data)
{
  lineStack *p = (lineStack *)malloc(sizeof(lineStack));
  p->data = data;
  p->next = stack;
  stack = p;
   return stack;
}
//出栈
lineStack *  pop(lineStack *stack)
{
  if(stack){
    printf("pop 元素:%d", stack->data);
    lineStack * p = stack;
    stack = stack->next;
    if(stack)
      {
        printf("新栈顶元素 %d\n",stack->data);
      }
    else
      puts("空栈1");
    free(p);
  }
  else{
    puts("空栈2");
  }
   return stack;
}
int _tmain(int argc, _TCHAR* argv[])
{
  lineStack *stack = NULL;
   stack = push(stack,1);
   stack = push(stack,2);
   stack = push(stack,3);
   stack = pop(stack);
   stack = pop(stack);
   stack = pop(stack);
  system("pause");
  return 0;
}

运行截图:

微信图片_20230116213137.png

目录
相关文章
|
18天前
|
C语言
链栈的初始化以及用C语言表示进栈、出栈和判断栈空
链栈的初始化以及用C语言表示进栈、出栈和判断栈空
18 3
|
1月前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
|
2月前
|
机器学习/深度学习 存储 算法
C语言栈与递归的实现讲解
C语言栈与递归的实现讲解
26 0
|
2月前
|
C语言
C语言栈的行编辑程序讲解
C语言栈的行编辑程序讲解
31 0
|
2月前
|
C语言
C语言栈的括号匹配的检验讲解及相关代码
C语言栈的括号匹配的检验讲解及相关代码
36 0
|
2月前
|
存储 安全 C语言
C语言抽象数据类型栈的定义讲解
C语言抽象数据类型栈的定义讲解
22 0
|
2月前
|
C语言
数据结构之栈详解(C语言手撕)
数据结构之栈详解(C语言手撕)
39 1
|
2月前
|
存储 C语言
C语言栈的表示和实现的定义讲解
C语言栈的表示和实现的定义讲解
23 0
|
15天前
|
C语言
栈的问题:HDU—1022 Train Problem I(C语言)
栈的问题:HDU—1022 Train Problem I(C语言)
|
18天前
|
C语言
数据结构中顺序栈的进栈和出栈用C语言表示
数据结构中顺序栈的进栈和出栈用C语言表示
19 1