数据结构入门学习中。。。

堆栈学习

栈特性:

  • LIFO
  • 简单实现可用结构中仅含top与size

数组实现:

tydef struct{
    int top;
    int val[maxsize];
    }stk;
  • 判断是否为空
bool isEmpty(stack *stk)
{
    return stk->top==0;
}
  • 入栈
void push(stack *stk,int x)
{
    if(stk->top==MAXSIZE)
        return;
    stk->val[++stk->top]=x;
    return;
}
  • 出栈
int pop(stack *stk)
{
    if(isEmpty(stack))
        return;
    return stk->val[stk->top--];
} 

链表实现

对于C语言而言,数组实现的弊端在于初始时不一定能确定栈的大小。链表能实现栈,但我的疑惑在于,链表本身和栈似乎并不是同一种结构(似乎在定义上是分开的?不清楚其他语言中什么情况)。但链表既可以作为FIFO,也可以做LIFO的结构。和数组在C语言中都是实现更高级数据结构的基础。= =看来还有很多东西要去思考和学习一下。(因为今天看了一些C++和Java的实现,发现stack在其他语言中是一种单独的数据结构,而不需要借助数组或链表)

  • 基本结构
typedef struct   
{  
    int top;  
    Node* next;  
}Stack;  
  • 判断是否为空
return node==NULL;
  • 入栈
void StackPush(Stack *s, int top) //入栈  
{  
    /*是否满栈检查*/
    Node* tmpNode = (Node*)malloc(sizeof(*tmpNode));  
    tmpNode->top = top;  
    tmpNode->next = s;  
    s= tmpNode;    
}  
  • 出栈
int StackPop(Stack *s)
{
    /*是否为空检查*/
    int x=s->pop;
    s=s->next;
    return x;
}

一些其他操作

  • 用栈实现队列–再开栈–可递归或迭代
  • 查找最小元素–在线处理–每一步都操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值