首页 > 其他 > 详细

数据结构之栈的一些基本操作

时间:2019-10-13 16:43:10      阅读:74      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node * pNext;
}NODE,*PNODE;
typedef struct Stack
{
    PNODE pTop;
    PNODE pButtom;
}STACK,*PSTACK;

void init(PSTACK); //PSTACK 等价于struct Stack*
void push(PSTACK,int);
void traverse(PSTACK);
bool pop(PSTACK,int*);
bool empty(PSTACK);
void clear(PSTACK); //清空栈
int main(void)
{
    STACK S;//STACK 等价于 struct Stack
    int val;
    init(&S);  //造出一个空栈
    push(&S,1);  //压栈
    push(&S,2);
    push(&S,3);
    push(&S,4);
    push(&S,5);
    push(&S,6);
    push(&S,8);
    traverse(&S);
    if(pop(&S,&val))
    {
        printf("出栈成功!,出栈的元素是:%d\n",val);
        printf("出栈后的元素为:");
        traverse(&S); //遍历输出
    }
    else
    {
        printf("出栈失败!\n");
    }
   
    clear(&S);
    printf("清空栈后.");
    traverse(&S);
    return 0;
}
void init(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    if(NULL == pS->pTop)
    {
        printf("动态内存分配失败!\n");
        exit(-1);
    }
    else
    {
       pS->pButtom = pS->pTop;
       pS->pTop->pNext = NULL;//等价于pS->Bottom->pNext = NULL;
    }
}
void push(PSTACK pS,int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    pNew->data = val;
    pNew->pNext = pS->pTop;
    pS->pTop = pNew;
   
    return;
}

void traverse(PSTACK pS)
{
    PNODE p = pS->pTop;
   
    while(p != pS->pButtom)
    {
        printf("%d ",p->data);
        p = p->pNext;
    }
    printf("\n");
   
    return ;
}
bool pop(PSTACK pS,int* pVal)
{
    if(empty(pS))
    {
        return false;
    }
    else
    {
       PNODE r = pS->pTop;
       *pVal = r->data;
       pS->pTop = r->pNext;
       free(r);
       r = NULL;
      
       return true;
    }
}
bool empty(PSTACK pS)
{
    if(pS->pTop == pS->pButtom)
    {
        return true;
    }
    else
    {
        return false;
    }
}
void clear(PSTACK pS)
{
    if(empty(pS))
    {
        return ;
    }
    else
    {
        PNODE p = pS->pTop;
        PNODE q = NULL;
        while(p != pS->pButtom)
        {
            q = p->pNext;
            free(p);
            p = q;
        }
        pS->pTop = pS->pButtom;
       
        /*下面的方法也可以实现clear()
        while(pS->pTop != pS->pButtom)
        {
            PNODE p = pS->pTop;
            pS->pTop = pS->pTop->pNext;
            free(p);
            p = NULL;
        } */
    }
}

数据结构之栈的一些基本操作

原文:https://www.cnblogs.com/baoyingying/p/11666721.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!