栈和数组

<span style="background-color: rgb(255, 255, 204);"><strong>#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include<assert.h>


typedef struct Stack
{
    int nTop;
    int nLen;
    int *pnArr;                                //存储的是栈的值,nvalue
}Stack, *PStack;                               //定义一个栈对象,包含栈的长度,栈头的nTop指第n个元素,最大个数不超过nLen,


//初始化栈 nLen为栈的大小
PStack Create(int nLen)                               //建立栈就像是,开辟一个能存储n个数的内存空间,
                                              //我们可以随时查看内存空间存储了几个数据nTop,以及内存能存储数据的总个数nLen
{
    if (nLen <= 0)
    {
        return NULL;
    }


    PStack pStack = (PStack)malloc(sizeof(Stack));   //开辟一个栈空间内存,包含三个元素,nTop,nLen,*pnArr,三个元素
    pStack->nTop = 0;                                       //栈头=0,表示不包含任何元素,栈是空的,s[1]表示栈低元素
    pStack->nLen = nLen;
    pStack->pnArr = (int *)malloc(sizeof(int) * nLen);      //表示存储的nlen的int值得内存长度,用于存储数据
    
    return pStack;                                    
}


bool IsEmpty(PStack pStack)
{
    return pStack->nTop == 0;
}


bool IsFull(PStack pStack)
{
    return pStack->nTop == pStack->nLen;
}


void Push(PStack pStack, int nValue)
{
    if (pStack->nTop == pStack->nLen)           //如果栈顶指向的第几个元素等于栈的长度,,,则栈是满的
    {
        printf("栈已满!\n");
        return;
    }
    pStack->pnArr[pStack->nTop] = nValue;            //pnArr用于存储元素,就像数组一样,,,数组的第n个地址存储第n个元素,,,,数组总存储数据的个数不超过nlen
    pStack->nTop++;                                 //没入栈一次,数组的索引增加1,用于在下一个地址存储下一个数值
}


int Pop(PStack pStack)
{
    if (pStack->nTop == 0)                       //判断栈中元素的个数是不是为0,如果是表示栈是空栈
    {
        printf("栈为空!\n");
    
    }
    else
    {
        pStack->nTop--;                                  //出栈后,栈中的元素个数少一个
        return pStack->pnArr[pStack->nTop];
    }
    
}


void Destroy(PStack pStack)
{
    free(pStack->pnArr);
    pStack->pnArr = NULL;
    free(pStack);
    pStack = NULL;                                  //销毁栈,主要是销毁指针,让栈中元素指向NULL,表示空内存
}
int main()
{
    PStack pStack = Create(10);                                    //建立一个栈空间,用于存储元素值
    int i;
    for (i = 0; i < 12; i++)
    {
        Push(pStack, i);             
    }


    for (i = 0; i < 10; i++)
    {
        printf("%d ", Pop(pStack));
    }


    
    Destroy(pStack);
	system("pause");
    return 0;
}</strong></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值