<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>
|