栈(Stack)的解释及简单应用

本文深入解析了栈数据结构的定义、基本操作及特殊性,并通过实例演示了栈的应用,如正整数转换为二进制的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 栈的定义:栈是限定在表尾进行插入和删除操作的线性表,它是一种数据结构,其数据元素之间的关系呈线性关系。

    2.结构:
    在这里插入图片描述

    3.栈的操作:

    (1)入栈:向栈口存储数据元素(push)
    
    (2)出栈:从栈中去数据元素(pop)
    
    (3)栈顶指针(top):用来指向最后一个入栈元素
    
    (4)入栈操作:
    
    	①栈满不可入栈:top=SIZE-1(上溢)
    
    	②入栈(未满):top=top+1,S[top]=数据元素     S[top++]=数据元素 
    	
    (5)出栈操作:只有栈顶元素才可以出栈
    
    	①栈空不可入栈(下溢):top=-1 	 
    	
    	②if(栈不空){出栈}     
    	 if(top!=-1){top-=1;}出栈元素:S[top+1];
    

    4.栈的特殊性:

    (1)只有栈顶才能被操作
    
    (2)先进后出表(First In Last Out)
    
    (3)举例:1,2,3依次进栈,会有哪些出栈次序?
    
    ①1,2,3进,再3,2,1出.出栈次序321 	②1进,1出,2进,2出,3进,3出.出栈次序123
    
    ③1进,2进,2出,1出,3进,3出,出栈次序213 	④1进,1出,2进,3进,3出,2出.出栈次序132
    
    ⑤1进,2进,2出,3进,3出,1出.出栈次序231 
    
    提问:有没有312的出栈次序?
    
    答:不会有,因为3先出栈,意味着3进过栈,若3进过,就是说1、2已经在栈里,1是栈底,3是栈顶,出来次序只能是321
    

    5.栈的简单应用: 任意输入一个正整数x,输出x的二进制数.

    #include<stdio.h>
    #include<stdlib.h>
    #define SIZE 100
    int ExchangeBinary(int * Stack,int number);
    void Print_Bin(int * Stack,int top);
    int main(void){
    	int * Stack;
    	Stack = (int *) malloc(sizeof(int )*SIZE);
    	int number,top;
    	printf("Please input a number(number>0):");
    	scanf("%d",&number);
    	top = ExchangeBinary(Stack,number);
    	printf("BinaryCode is  :");
    	Print_Bin(Stack,top);
    }
    int ExchangeBinary(int * Stack,int number){
    	int top = -1;
    	while(number){
    		if(top<SIZE){
    			Stack[++top] = number%2;
    			number /= 2;
    		}
    		else printf("Stack Is Full!");
    	}
    	return top;
    }
    void Print_Bin(int * Stack,int top){
    	while(top!=-1){
    		printf("%d",Stack[top--]);
    	}
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值