您的位置:首页 > 其它

链栈的基本认识与操作

2018-02-08 14:29 225 查看
链栈是特殊的链表,对于链表我们可以对其任意位置进行插入和删除,而对于链栈我们只能对其栈顶进行插入和删除(压栈和出栈)。因此我们也称链栈是受限的链表,其特性是“后进先出——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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: