链栈的基本认识与操作

链栈是特殊的链表,对于链表我们可以对其任意位置进行插入和删除,而对于链栈我们只能对其栈顶进行插入和删除(压栈和出栈)。因此我们也称链栈是受限的链表,其特性是“后进先出——LIFO”。

首先定义:

typedef struct stack{
	int data;
	struct stcak *next;
}Lnode;
typedef struct stack *LinkStackptr;
typedef struct {
	LinkStackptr Top;
	int count;
}LinkStack;
然后初始化:
void CreatStack(LinkStack *S){
	S->Top=NULL;
	S->count=0;
} //初始化链栈

压栈:

void Push(LinkStack *S,int da){  //头指针和栈顶指针重合 
	LinkStackptr p;
	p=(LinkStackptr)malloc(sizeof(Lnode));
	p->data=da;
	p->next=S->Top;
	S->Top=p;
	S->count++;
} 
退栈(弹栈):
void Pop(LinkStack *S){
	LinkStackptr q;
	if(S->Top!=NULL){//判断栈是否为空 
		q=S->Top;
		printf("%d\t",q->data);
		S->Top=S->Top->next;
		free(q);
		S->count--;
	}
} 

测试程序:

#include<stdio.h>
#include<stdlib.h>
/*
链栈的定义操作 
*/
typedef struct stack{
	int data;
	struct stcak *next;
}Lnode;
typedef struct stack *LinkStackptr;
typedef struct {
	LinkStackptr Top;
	int count;
}LinkStack;
void CreatStack(LinkStack *S){
	S->Top=NULL;
	S->count=0;
} //初始化链栈
void Push(LinkStack *S,int da){  //头指针和栈顶指针重合 
	LinkStackptr p;
	p=(LinkStackptr)malloc(sizeof(Lnode));
	p->data=da;
	p->next=S->Top;
	S->Top=p;
	S->count++;
} 
void Pop(LinkStack *S){
	LinkStackptr q;
	if(S->Top!=NULL){//判断栈是否为空 
		q=S->Top;
		printf("%d\t",q->data);
		S->Top=S->Top->next;
		free(q);
		S->count--;
	}
} 
void text(){
	LinkStack *S;
	CreatStack(&S);
	int i;
	for(i=0;i<=3;i++)
	Push(&S,i);
	while(S)
	Pop(&S);
}
int  main(){
	
	text();
	return 0;
}
 























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值