数据结构——c栈实现

栈,后进先出

#include<stdlib.h>

typedef struct _stack{
    int data;
    struct _stack *next;
} *stack, SNode;

// 使用单链表来实现栈
// 栈指针指向链表第一个结点,所有的添加/删除/访问只对链表的第一个结点进行操作

void initStack(stack *s)
{
    *s = NULL;
}

// 只要可能修改栈指针,都用二级指针 
void push(stack *s, int val)
{
    stack temp = (stack)malloc(sizeof(SNode));
    stack t = *s;

    if(t == NULL)
    {
        temp->data = val;
        temp->next = NULL;
        *s = temp;  // 把栈顶指针指向第一个结点

        return;
    }
    
    // 新结点设置值并指向旧栈顶结点
    temp->data = val;
    temp->next = t;
    
    *s = temp; // 栈顶指针指向新结点
}

// 出栈,移除栈顶元素
void pop(stack *s)
{
    stack t = *s;
    
    if(t == NULL)
        return;
    
    // t指向栈第二结点
    t = t->next;
    
    //释放栈顶结点
    free(*s);
    
    //重新设置栈顶结点
    *s = t;
}

int getTop(stack *s)
{
    stack t = *s;
    if(t == NULL)
        return -1;
    // 返回栈顶的值
    return t->data;
}

运行结果

$ ./stack 
  7
  7  6  5

 

posted @ 2020-09-18 13:02  桃花春风一杯酒  阅读(143)  评论(0)    收藏  举报