2021-04-22 xdu程序设计-堆栈模拟

该博客介绍了如何使用C语言实现一个堆栈模拟程序,包括初始化、入栈、出栈、获取栈顶元素和显示栈中元素等功能。程序通过动态内存分配扩展栈的容量,并在遇到栈满时进行扩容。在主函数中,展示了如何进行一系列的栈操作并打印结果。
摘要由CSDN通过智能技术生成

xdu程序设计-堆栈模拟

涉及知识点:内存管理、结构体定义、基本数据结构

要求:

  1.   编写一个程序模拟堆栈,要求能够模拟、入栈、出栈、返回栈顶元素等基本操作
  2. 栈中元素可用整数代替 不能使用C++模板库预定义的类型
  3. 程序运行中可输入多组入栈、出栈操作,每次操作后展示栈中元素
#include<stdio.h>
#include<stdlib.h>
	/* 栈的基本操作 */
# define STACK_INIT_SIZE 100
# define INCREMENT 10
# define OVERFLOW 0
# define ERROR 0
# define OK 1
typedef int Status; 
typedef int ElemType; /* ElemType类型根据实际情况而定,这里假设为int */
struct SqStack
	{
		ElemType  *base;    //栈底指针,栈构造前和销毁后为空
		ElemType  *top;    //栈顶指针,指向栈顶元素的下一位置
		int  stacksize;         //当前的栈空间大小
	}; 
Status InitStack(SqStack &S)//构造一个空栈
	{
		S.base = (ElemType *) malloc
             (STACK_INIT_SIZE * sizeof(ElemType)) ;
		if(!S.base) return (OVERFLOW);
		S.top = S.base;
		S.stacksize = STACK_INIT_SIZE ;
		return  OK;
	}//InitStack
Status push(SqStack  &S, ElemType e)//入栈 
{
	 if (S.top - S.base == S.stacksize)  {//栈满,扩充空间
            S.base = (ElemType *) realloc(S.base,
                   (S.stacksize+INCREMENT)*sizeof( ElemType));
             if (!S.base) return OVERFLOW;
             S.stacksize ++;
             S.top = S.base + S.stacksize;
       }
		*(S.top) = e;    
		S.top++;
		return  OK;
}
Status pop(SqStack  &S, ElemType &e)//出栈 
{
	if(S.top == S.base) return ERROR;
	e = *--S.top;
	return OK;
}
Status Gettop(SqStack S,ElemType &e)//获取栈顶元素 
{
	if(S.top == S.base) return ERROR;
	e = *(S.top-1);
	return OK;
}
Status StackLength(SqStack S)
{ 
        return S.top - S.base;
}
void show(SqStack S)
{
	while(S.base < S.top)
	{
		printf("%d ",*S.base);
		S.base++;
	}
}
int main()
{
        int j;
        SqStack s;
        int e;
        if(InitStack(s))
        {	
			for(j=1;j<=10;j++)
            push(s,j);
		}
        printf("栈中元素依次为:\n");
        show(s);
        pop(s,e);
        printf("\n弹出的栈顶元素 e=%d\n",e);
        Gettop(s,e);
        printf("栈顶元素 e=%d \n栈的长度为 %d\n",e,StackLength(s));
        return 0;
}

本题实现了基本的初始化 入栈 出栈以及展示的功能

具体实现出入栈操作时可以规定栈的大小

遇到的问题

  1. 指针运用:用&s或&e的时候说明要改变其值,函数中处理时用原始s,e即可
  2. 栈的申请:malloc申请的是一块纯粹的内存,需要通过elemtype*来强制转化其类型为可储存elemtype型的
  3. 指针++即指向下个指针


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值