typedef struct node{
int data;
node *next;
}Node,*pNode;
typedef struct{
pNode top;
int count;
}LinkStack,*pLinkStack;
注意:(1).首先定义节点结构体,每一个链栈都有栈顶节点,用top是指向栈顶节点
(2).对链栈进行操作可以用指针,通过->进行操作
链栈初始化:
void init(pLinkStack s){
s->top=NULL;
s->count=0;
}
注意:(1).初始化一定要把指向栈顶节点设为NULL,要不然最后while停不下
入栈:
void push(pLinkStack s,int a){
pNode p=(pNode)malloc(sizeof(Node));
p->data=a;
p->next=s->top;
s->top=p;
s->count++;
}
出栈:
int pop(pLinkStack s){
pNode p=s->top;
int a=p->data;
s->top=p->next;
s->count--;
free(p);
return a;
}
注意:(1).出栈记得释放p节点
完整代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct node{
int data;
node *next;
}Node,*pNode;
typedef struct{
pNode top;
int count;
}LinkStack,*pLinkStack;
void init(pLinkStack s){
s->top=NULL;
s->count=0;
}
int isEmpty(pLinkStack s){
if(s->top==NULL){
return 1;
}else{
return 0;
}
}
void push(pLinkStack s,int a){
pNode p=(pNode)malloc(sizeof(Node));
p->data=a;
p->next=s->top;
s->top=p;
s->count++;
}
int pop(pLinkStack s){
pNode p=s->top;
int a=p->data;
s->top=p->next;
s->count--;
free(p);
return a;
}
int ding(pLinkStack s){
return s->top->data;
}
int length(pLinkStack s){
return s->count;
}
int main(){
int len,top,te;
LinkStack s;
init(&s);
push(&s,1);
push(&s,3);
push(&s,5);
push(&s,7);
top=ding(&s);
len=length(&s);
printf("top:%d,len:%d\n",top,len);
while(!isEmpty(&s)){
te=pop(&s);
printf("删除的顶部元素为:%d\n",te);
}
system("pause");
}