栈的基本操作(c语言实现)

数据结构

顺序栈

  • 顺序栈与顺序链表差不多,初始化时都要有一个一维数组和一个用来存放下标的变量(可以理解为指针)

  • 顺序栈已满和已空的标志:

    top==MAXsize-1//已满
    top==-1;//已空
    

    顺序栈的定义

    typedef struct stack
    {
    	elemtype elem[Maxsize];
    	int top;
    }stack;
    
  • 顺序栈的初始化非常简单,就是将top=-1即可

  • 进栈操作

    void push(stack *&s,elemtype e)
    {
    	if(s->top==Maxsize-1) printf("栈已经满了\n");//栈已满的标志
    	else
    	{
    		s->top++;
    		s->elem[s->top]=e;
    	}
    }
    
  • 出栈操作也比较简单,就是将top–即可

链栈

  • 链栈和链表差不多,如果初始化是不是要申请空间吗,如果申请的指针指向的空间为NULL时,即操作失败

  • 链栈的定义

    int InitStack(Stack *s)
    {
    	if (NULL == s)
    	{
    		return FAILURE;//申请空间失败
    	}
    	s->next=NULL;//相当于有一个栈头,栈头的下一个栈节点的地址为空,初始化后的栈都可以看作空栈,这也是判断栈是否为空的标志,即栈头指针->next==NULL;
    	return SUCCESS;
    }
    
    
  • 栈的定义—大同小异哈

    typedef struct Stack	//表示栈信息 
    {
    	double data;
    	struct Stack *next;
    }Stack;
    
  • 链栈进栈操作

    int push(Stack *s, double num)
    {
    	if (NULL == s)
    	{
    		return FAILURE;
    	}
    	Stack *temp;
    	temp=(Stack *)malloc(sizeof(Stack));
    	if (temp==NULL)
    	{
    		return FAILURE;
    	}
    	temp->data = num;
    	temp->next = s->next;
    	s->next=temp;
    	return SUCCESS;
    }
    
  • 链栈的出栈操作

    double pop(Stack *s)
    {
    	if (NULL == s)//表示该栈不存在 
    	{
    		return FAILURE;
    	}
    	if (s->next== NULL)	//空栈不能出栈 
    	{
    		return FAILURE;
    	}
    	Stack *temp;
    	temp=s->next;
    	s->next=temp->next;
    	double data=temp->data;
    	free(temp); 
    	return data;
    }
    
    
  • 取栈顶元素

    double GetTop(Stack *s)
    {
    	if(NULL == s)
    	{
    		return FAILURE;
    	}
    	if(s->next==NULL)
    	{
    		return FAILURE;
    	}
    	return s->next->data;//只有这句代码实际有效哈哈哈
    }
    

数组与广义表

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值