栈的构造

郝斌老师---

/*  了解栈的构造方法 */  
#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 pBottom;  
}STACK, * PSTACK;  
  
void init(PSTACK);             //初始化栈  
void push(PSTACK, int);        //压栈  
bool empty(PSTACK);            //判断栈是否为空  
void traverse(PSTACK);         //遍历栈  
void pop(PSTACK,int *);        //出栈  
void clear(PSTACK);            //清空栈  
  
int main()  
{  
    STACK S;  
    int val;  
    /*测试初始化栈及压栈函数*/  
    init(&S);  
    push(&S, 1);  
    push(&S, 2);  
    push(&S, 3);  
    push(&S, 4);  
    push(&S, 5);  
    traverse(&S); 
	
    /*测试出栈*/  
    pop(&S,&val); 
	printf("被删除的栈的数据域为:%d\n", val);
    traverse(&S);  
    
	/*测试清空栈*/  
    clear(&S); 
	printf("清栈后:");
    traverse(&S);
  
    return 0;  
}  
  
/*初始化栈——使pTop和pBottom指向同一节点*/  
void init(PSTACK pS)  
{  
    pS->pBottom = (PNODE)malloc(sizeof(NODE));  
    if (pS->pBottom == NULL)  
    {  
        printf("动态内存分配失败!\n");  
        exit(-1);  
    }  
    pS->pBottom->pNext = NULL;  
    pS->pTop = pS->pBottom;  
    return;  
}  
/*压栈——创建一个新节点,连到定节点上面,把新节点标记为顶节点*/  
void push(PSTACK pS, int val)  
{  
    PNODE pNew;  
    pNew = (PNODE)malloc(sizeof(NODE));  
    if (NULL == pNew)  
    {  
        printf("动态内存分配失败!\n");  
        exit(-1);  
    }  
    pNew->data = val;  
    pNew->pNext = pS->pTop;  
    pS->pTop = pNew;  
    return;  
}  
/*判断栈是否为空*/  
bool empty(PSTACK pS)  
{  
    if (pS->pTop == pS->pBottom)  
        return true;  
    else  
        return false;  
}  
/*遍历栈——定义临时变量temp,从pTop开始一直往下指*/  
void traverse(PSTACK pS)  
{  
    if (empty(pS))  
        printf("栈为空 !\n");  
    else  
    {  
        PNODE temp;  
        temp = pS->pTop;  
        printf("遍历栈:");  
        while (temp != pS->pBottom)  
        {  
            printf("%d ", temp->data);  
            temp = temp->pNext;  
        }  
        printf("\n");  
    }  
    return;  
}  
/*出栈—— pTop下移,且把原pTop占用的空间释放,并把出栈元素保存到pVal*/  
void pop(PSTACK pS,int *pVal)  
{  
    if (empty(pS))  
        printf("栈为空!\n");  
    else  
    {  
        PNODE temp = pS->pTop; 
		*pVal=temp->data;

        pS->pTop = temp->pNext;    
        free(temp);  
		temp=NULL;
    }  
    return;  
}  
/*清空栈——类似出栈*/  
void clear(PSTACK pS)  
{  
    if (empty(pS))  
        printf("栈为空!\n");  
    else  
        while (pS->pTop != pS->pBottom)  
        {  
            PNODE temp = pS->pTop;  
            pS->pTop = temp->pNext;//pS->pTop = pS->pTop->pNext;  
            free(temp);  
        }  
    return;  
}  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值