栈的操作

本文介绍了一个简单的栈数据结构实现方法,包括初始化、压栈、遍历、出栈、清空和判断是否为空等基本操作,并提供了完整的C语言代码示例。


#include <stdio.h>
#include <malloc.h> 

typedef struct Node
{
    int data;
    struct Node *pNext;
}NODE,*PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom; 
}STACK,*PSTACK;
 
//函数声明
void init(PSTACK);//初始化 
void push(PSTACK, int );//压栈 
bool traverse(PSTACK);//遍历 
bool pop(PSTACK, int *);//出栈 
void clear(PSTACK pS);//清空 
bool empty(PSTACK); //判断是否为空 
 
int main(int argc, char *argv[])
{
    STACK S;
    int val;
    init(&S);
    push(&S,1);
    push(&S,2);
    push(&S,3);
    push(&S,4); 
    traverse(&S);
//    if(pop(&S,&val)) 
//        printf("出栈成功,出栈的元素是%d\n",val); 
//    traverse(&S); 
    clear(&S);
    traverse(&S);
    return 0;
}

void init(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    pS->pBottom = pS->pTop;
    pS->pBottom->pNext = NULL;
}

void push(PSTACK pS, int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    pNew->data = val;
    pNew->pNext = pS->pTop;
    pS->pTop = pNew;
} 

bool traverse(PSTACK pS)
{
 
    PNODE p = (PNODE)malloc(sizeof(NODE));
    p = pS->pTop;
    while(p!=pS->pBottom)
    {
        printf("-%d-",p->data);
        p = p->pNext;
    }
    printf("\n");    
}

bool pop(PSTACK pS, int *val)
{
    if(empty(pS))
        printf("空栈\n"); 
    else
    { 
        PNODE p = (PNODE)malloc(sizeof(NODE));
        p = pS->pTop;
        *val = p->data;
        pS->pTop = p->pNext;
        free(p);
        p = NULL; //初始化结点 
        return true; 
    }
}

bool empty(PSTACK pS)
{
    if(pS->pTop == pS->pBottom)
        return true;
    else 
        return false;
}

void clear(PSTACK pS)
{
    if(empty(pS))
        return;
    else
    {
        PNODE p = pS->pTop;
        PNODE q = NULL;
        while(p!=pS->pBottom)
        {
            q = p->pNext;
            free(p);
            p = q;
            
        }
        pS->pTop = pS->pBottom;
    }
}

先进后出

image

转载于:https://www.cnblogs.com/Aidongshu/p/8351405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值