zoukankan      html  css  js  c++  java
  • 栈的实现(C语言实现) 分类: 数据结构 2015-01-30 23:39 279人阅读 评论(0) 收藏

    //头文件 
    #include <stdio.h>
    /*====================
    栈 数据结构
    利用数组实现
    ====================*/
    #define MAX 100
    #define ok 1
    #define error 0
    typedef struct Stack
    {
    	int data[MAX];  
    	int top;   			//栈顶
    	int bottom;			//栈底
    }Stack,*STACK;
    //初始化栈
    int InitStack(STACK stack);
    //销毁
    int DestroyStack(STACK stack);
    //清空
    int ClearStack(STACK stack);
    //栈空
    int StackEmpty(STACK stack);
    //获取栈顶元素
    int GetTop(STACK stack,int* elem);
    //压栈
    int Push(STACK stack,int* elem);
    //出栈
    int Pop(STACK stack,int* elem);
    //返回栈中元素长度
    int StackLength(STACK stack,int* len);
    //打印栈中元素
    int PrintStack(STACK stack);
    //栈满
    int StackFull(STACK stack);
    
    
    
    //main函数中实现
    #include "stack.h"
    
    int main()
    {
    	int num=10, num1, i=0,j=0;
    	Stack stack;
    	int initFlag=InitStack(&stack);
    	if(!initFlag)
    		return 0;
    	for(num1=0;num1<10;num1++)
    		Push(&stack,&num1);
    /*		
    	int pushFlag=Push(&stack,&num);
    	if(!pushFlag)
    		return 0;
    */
    //	ClearStack(&stack);
    	for(;i<10;i++)
    	{
    	int flag=Pop(&stack,&num1);
    	if(flag)
    		printf("%d ",num1);
    	else
    		printf("Pop error");
    	}
    	int lenFlag=StackLength(&stack,&num1);	
    	if(lenFlag)
    		printf("len=%d ",num1);
    	else
    		printf("StackLength error");
    /*
    	int getFlag=GetTop(&stack,&num1);
    	if(getFlag)
    		printf("%d ",num1);
    */		
    	PrintStack(&stack);
    	return 0;
    }
    //初始化栈
    int InitStack(STACK stack)
    {
    	if(stack==NULL)
    		return error;
    	stack->bottom=stack->top=0;
    	return ok;
    }
    //压栈
    int Push(STACK stack,int* elem)
    {
    	int flag=StackFull(stack);
    	if(!flag)
    		return error;
    	stack->data[stack->top]	=*elem;
    	++stack->top;
    	return ok;
    }
    //打印栈中所有元素
    int PrintStack(STACK stack)
    {
    	int i=0;
    	int flag=StackEmpty(stack);
    	if(!flag)
    		return error;
    	for(i=0;i<stack->top;i++)	
    	{
    		printf("%d ",stack->data[i]);
    	}
    	printf("
    ");
    	return ok;
    }
    //栈空
    int StackEmpty(STACK stack)
    {
    	if(stack==NULL || stack->top==stack->bottom)
    		return error;
    	else
    		return ok;
    }
    //出栈
    int Pop(STACK stack,int* elem)
    {
    	int flag=StackEmpty(stack);
    	if(!flag)
    		return error;
    	
    	*elem=stack->data[stack->top-1];
    	--stack->top;
    	return ok;
    }
    //栈满
    int StackFull(STACK stack)
    {
    	if(stack==NULL || stack->top>MAX)
    		return error;
    	else
    		return ok;
    }
    //销毁
    int DestroyStack(STACK stack)
    {
    	if(stack==NULL)	
    		return ok;
    	else
    	{
    		stack->top=stack->bottom;
    		stack=NULL;
    		return ok;
    	}
    }
    //清空
    int ClearStack(STACK stack)
    {
    	int flag=StackEmpty(stack);
    	if(!flag)
    		return error;
    	else
    	{
    		stack->top=stack->bottom;
    		return ok;
    	}
    }
    //获取栈顶元素
    int GetTop(STACK stack,int* elem)
    {
    	int flag=StackEmpty(stack);
    	if(!flag)
    		return error;
    	*elem=stack->data[stack->top-1];
    	return ok;
    }
    //返回栈中元素长度
    int StackLength(STACK stack,int* len)
    {
    	if(stack==NULL)	
    		return error;
    	if(stack->top==stack->bottom)
    	{
    		*len=0;
    		return ok;
    	}
    	else
    	{
    		*len=stack->top;
    		return ok;
    	}
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    文字超出省略号表示的几种方法
    Sqlserver数据库死锁
    Session丢失原因与解决方案
    CLR Profiler 性能分析工具 (转)
    微软HoloLens虚拟现实可以开发了。
    数据表分区
    SQLSERVER内核架构剖析 (转)
    理解SQL SERVER中的分区表(转)
    SQL Server Profile:使用方法和指标说明
    监视剪贴板(转)
  • 原文地址:https://www.cnblogs.com/L-Lune/p/4671285.html
Copyright © 2011-2022 走看看