数据结构—顺序栈

#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>



//定义顺序栈类型

typedef int DataType;
struct stack
{
	int max;//栈最大容量
	int top;//栈顶指针
	DataType *elem;//elem动态分配内存后指向*elem数组起始地址
};
typedef struct stack *SeqStack;



//创建空栈

SeqStack SetNullStack_seq(int m)//m为指定的最大空间
{
	SeqStack sstack=(SeqStack)malloc(sizeof(struct stack));
	if(sstack->elem!=NULL)
	{
		sstack->elem=(int*)malloc(sizeof(int)*m);
		if(sstack->elem!=NULL)
		{
			sstack->max=m;//最大容量m
			sstack->top=-1;//栈顶初值-1
			return(sstack);
		}
		else
		{
			free(sstack);
			return NULL;
		}
	}
	else
	{
		printf("alloc failure");
		return NULL;
	}
}



//判断栈空

int IsNullStack_seq(SeqStack sstack)
{
	return(sstack->top==-1);//栈顶-1返回1,否则返回0
}



//进栈

void Push_seq(SeqStack sstack,int x)//x进栈
{
	if(sstack->top>=sstack->max-1)//判断栈满
		printf("overflow!\n");
	else
	{
		sstack->top++;//栈顶上移
		sstack->elem[sstack->top]=x;//将x置于栈顶
	}
}



//出栈

void Pop_seq(SeqStack sstack)
{
	if(IsNullStack_seq(sstack))//判断栈空
		printf("underflow!\n");
	else
		sstack->top=sstack->top-1;//栈顶下移
}



//取栈顶元素

DataType Top_seq(SeqStack sstack)
{
	if(IsNullStack_seq(sstack))//判断栈空
		printf("empty!\n");
	else
		return sstack->elem[sstack->top];//返回栈顶元素

}



//打印顺序栈

void printstack(SeqStack sstack)
{
    if (IsNullStack_seq(sstack))
        printf("\n The stack is NULL ! \n");
    else
    {
        for (int i = 0;i <=sstack->top;i++)
            printf("%d ",sstack->elem[i]);
    }
    printf("\n");
}


//主函数

int main()
{
	int m=10;//定义栈容量

	SeqStack stack1=SetNullStack_seq(m);//创空栈stack1

	Push_seq(stack1,5);//5,8,9依次进栈
	Push_seq(stack1,8);
	Push_seq(stack1,9);
	printstack(stack1);

	Pop_seq(stack1);//一次出栈(出栈栈顶元素)
	printstack(stack1);

	printf("栈顶元素:%d\n",Top_seq(stack1));//求栈顶元素值

	system("pause");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值