链栈的C语言算法演示

仅供参考

/*
 时间: 2020/09/24 15:00 
 目的:链栈的C语言算法演示 
 功能:了解压栈,出栈,输出栈,clear等操作 
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct node{
	int date;
	struct node *pNext;
}NODE,*PNODE;

typedef struct stack{
	PNODE pTop;
	PNODE pBottom;
}STACK,*PSTACK;

void init(PSTACK);//创建一个空栈 
void push(PSTACK,int);//压栈 
void pop(PSTACK);//出栈 
void traverse(PSTACK);//将栈的元素进行输出 
bool empty(PSTACK);//判断是否为空栈 
void clear(PSTACK);//将栈清空

int main()
{
	STACK S;
	init(&S);//创建一个空栈 
	//以下五行进行五次压栈操作 
	push(&S,1);
	push(&S,2);
	push(&S,3);
	push(&S,4);
	push(&S,5);
	//将栈的元素进行输出 
	traverse(&S); 
	//以下两行进行出栈操作
	pop(&S); 
	pop(&S); 
	traverse(&S);  
	clear(&S);//将栈清空 
	traverse(&S);
	pop(&S);
    return 0;
}

void init(PSTACK pS){
	//将栈顶指针和栈底指针指向同一个空结点 
	 pS->pTop=(PNODE)malloc(sizeof(NODE));
	 pS->pBottom=pS->pTop;
}

void push(PSTACK pS,int val){
	PNODE pNew=(PNODE)malloc(sizeof(NODE)); 
	pNew->date=val;
	pNew->pNext=pS->pTop;//使新结点指向前一个结点 
	pS->pTop=pNew;//使栈顶指针指向新结点 
}

void pop(PSTACK pS){
	PNODE p=pS->pTop;
	if(empty(pS)==true){
		pS->pTop=p->pNext;//将栈顶指针指向后一个结点完成出栈 
		printf("出栈成功,出栈的数据是:%d\n",p->date);
		free(p);
	}
	else
	    printf("出栈失败!\n");
}

void traverse(PSTACK pS){
	PNODE p=pS->pTop;
	while(p!=pS->pBottom){
		printf("%d  ",p->date);
		p=p->pNext;
	}
	printf("\n");
}

bool empty(PSTACK pS){
	if(pS->pTop==pS->pBottom)//栈顶指针和栈底指针相等则为空栈
	   return false; 
	else
	   return true;
}

void clear(PSTACK pS){
	//定义两个指针方便进行操作 
	PNODE p=pS->pTop;
	PNODE q=NULL;
	//使用while循环进行清空操作 
	while(p!=pS->pBottom){
		q=p->pNext;
		pS->pTop=q;
		free(p);
		p=q;
		q=q->pNext;
	}
}
/*
总结:搞清楚链栈各个操作的原理做到心中有数 
-----------------------
在dev中输出结果为 
5  4  3  2  1
出栈成功,出栈的数据是:5
出栈成功,出栈的数据是:4
3  2  1

出栈失败!
									正确 
----------------------- 
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值