链栈的基本认识与操作
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;然后初始化:
LinkStackptr p;
p=(LinkStackptr)malloc(sizeof(Lnode));
p->data=da;
p->next=S->Top;
S->Top=p;
S->count++;
} 退栈(弹栈):
#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;
}
首先定义: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;
}
相关文章推荐
- 链表,顺序表,链队,链栈,顺序队,顺序栈,二叉树的基本操作函数
- 顺序栈、链栈基本操作
- 顺序栈、链栈基本操作
- 数据结构 - 链栈的基本操作(C语言)
- 链栈的基本操作实现(c语言)
- 数据结构顺序栈和链栈基本操作----c++实现
- 链栈的基本操作
- 顺序栈和链栈的基本操作
- Lucene总结系列(一)--认识、helloworld以及基本的api操作。
- c语言(逆序)建立链栈与栈的基本操作
- 链栈和链队的基本操作
- C++ STL 有关容器部分 priority_queue 优先级队列的基本操作以及认识案例
- 栈定义及其基本操作,顺序栈和链栈
- 数据结构-链栈的基本操作
- 数据结构系列-链栈的基本操作
- 链栈的基本操作(初始化,压栈,出栈)
- 1、python的基本认识和基本操作
- 6-5 链栈的基本操作(10 分)PTA无法评测但是感觉写的符合要求
- 数据结构---链栈的基本操作
- 数据结构 链栈的基本操作