栈和数组

来源:互联网 发布:saa7134hl采集卡软件 编辑:程序博客网 时间:2024/05/16 12:02
<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>

0 0
原创粉丝点击