• 顺序栈的基本操作


    引入外部文件和初始条件

    #include<stdlib.h>
    #include<stdio.h>
    #define MAXSIZE 100
    

    顺序栈的存储结构:须有一个一维数组去存放栈中的基本元素,还要栈顶指针,用来存放栈顶元素的下标

    typedef struct SqStack{
    	int elem[MAXSIZE];
    	int top;
    }SqStack,*stack_type;
    

    结构如下

    接着开始栈的初始化

    stack_type Init_SqStack()
    {
    	//创建一个顺序栈,返回一个指向顺序栈的指针,为0表示分配空间失败
    	SqStack *S;
    	S=(stack_type)malloc(sizeof(SqStack));
    	if(S)
    	{
    		S->top=-1;
    		printf("置空栈成功!
    ");
    	}
    	return S;
    }
    

     判断栈是否为空

    //判断栈是否为空,空表示0,非空表示1
    int Empty_Stack(stack_type S)
    {
    	if(S->top==-2)
    		return 0;
    	else
    		return 1;
    }
    

     往栈中插入元素

    //往栈顶插入元素x,返回1表示插入成功,返回0表示插入失败
    int Push_SqStack(stack_type S)
    {
    	if(S->top==MAXSIZE-1)
    	{
    		printf("栈已经满了!
    ");
    		return 0;
    	}
    	else
    		printf("请输入需要入栈的个数:");
    	if(S->top<0)
    	{	
    		//栈的初始化数据入栈,一次性输入多个元素
    		int n;
    		scanf("%d",&n);
    		printf("请依次输入需要入栈的元素:
    ");
    		while(S->top<n-1)
    		{
    			S->top++;
    			scanf("%d",&S->elem[S->top]);
    		}
    	}else{
    		//栈的后期数据输入,一个一个入栈
    		printf("请插入你要入栈的元素:");
    		S->top++;
    		scanf("%d",&S->elem[S->top]);
    	}
    	printf("push the elements success!
    ");
    	return 1;
    }
    

     出栈操作:

    //删除栈顶元素并保存在向量x中,返回1表示出栈成功
    int Pop_Stack(stack_type S,int *tmp)
    {
    	if(!Empty_Stack(S))
    	{
    		printf("栈是空的!
    ");
    		return 0;
    	}
    	else{
    		*tmp=S->elem[S->top];
    		S->top--;
    		return 1;
    	}
    }
    

     获取栈顶元素

    //取得栈顶元素
    int getTop_SqStack(stack_type S,int *data)
    {
    
    	if(!Empty_Stack(S))
    	{
    		printf("这是一个空栈!
    ");
    		return 0;
    	}else{
    		*data=S->elem[S->top];
    		return 1;
    	}
    }
    

     栈中元素的打印

    void print_stack(stack_type s)
    {
    	int i=s->top;
    	for(;i>=0;i--)
    		printf("%d ",s->elem[i]);
    	printf("
    ");
    }
    

    主程序如下

    void main()
    {
    	int select,data,k;
    	stack_type s;
    	printf("
    *************************
    ");
    	printf("*****1、栈的初始化*********
    ");
    	printf("*****2、数据入栈***********
    ");
    	printf("*****3、数据出栈***********
    ");
    	printf("*****5、栈的打印***********
    ");
    	printf("*****6、退出***************
    ");
    	printf("***************************
    ");
    	printf("请选择相应的操作
    ");
    	scanf("%d",&select);
    	while(select)
    	{
    		switch(select)
    		{
    			case 1:s=Init_SqStack();break;
    			case 2:Push_SqStack(s);break;
    			case 3:Pop_Stack(s,&data);
    				   printf("出栈的元素为:%d
    ",data);
    				   break;
    			case 4:k=getTop_SqStack(s,&data);
    				   if(k)
    					   printf("栈顶元素是%d
    ",data);
    				   break;
    			case 5:print_stack(s);
    				   break;
    			case 6:exit(0);
    		}
    		printf("请选择相应的选项
    ");
    		scanf("%d",&select);
    	}
    }
    

     程序截图如下:

  • 相关阅读:
    使用 PHPMailer 发邮件
    安装phpssdb扩展:
    CI安全
    CI调试应用程序
    Sphinx的GEO距离搜索 [转载]
    Lua开发环境搭建(Mac OS X)
    MySQL 的索引和最左前缀原则
    PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)
    PHP连接MySQL报错"No such file or directory"的解决办法
    web 性能优化指南阅读笔记
  • 原文地址:https://www.cnblogs.com/helloworldcode/p/6747736.html
Copyright © 2020-2023  润新知