链栈的结构体定义
/*定义*/
typedef struct stacklnode{char data;struct stacklnode *next;
}stacklnode,*linkstack;
初始化
/*初始化*/
void f1(linkstack *q){*q=NULL;
}
入栈
/*入栈*/
void f2(linkstack *q,char e ){linkstack p=(linkstack)malloc(sizeof(stacklnode));p->data=e;p->next=*q;*q=p;
}
求栈的长度
/*求链栈的长度*/
void f3(linkstack q){linkstack p=q->next;int l=1;while(p!=NULL){p=p->next;l++;}printf("链栈长度是%d",l);F();
}
输出栈的元素
/*输出栈元素*/
void f4(linkstack q){printf("链栈是");while(q){printf("%c ",q->data);q=q->next;}F();
}
出栈
/*出栈*/
void f5(linkstack *q){char e;linkstack p=(linkstack)malloc(sizeof(stacklnode));p=*q;e=p->data;p=p->next;*q=p;printf("%c出栈成功",e);F();
}
代码实现
有链栈ABCD,出栈一次 两次
//链栈的相关操作实现
#include <stdio.h>
#include <stdlib.h>
void F() {printf("\n");printf("------------");printf("\n");
}
/*定义*/
typedef struct stacklnode{char data;struct stacklnode *next;
}stacklnode,*linkstack;
/*初始化*/
void f1(linkstack *q){*q=NULL;
}
/*入栈*/
void f2(linkstack *q,char e ){linkstack p=(linkstack)malloc(sizeof(stacklnode));p->data=e;p->next=*q;*q=p;
}
/*求链栈的长度*/
void f3(linkstack q){linkstack p=q->next;int l=1;while(p!=NULL){p=p->next;l++;}printf("链栈长度是%d",l);F();
}
/*输出栈元素*/
void f4(linkstack q){printf("链栈是");while(q){printf("%c ",q->data);q=q->next;}F();
}
/*出栈*/
void f5(linkstack *q){char e;linkstack p=(linkstack)malloc(sizeof(stacklnode));p=*q;e=p->data;p=p->next;*q=p;printf("%c出栈成功",e);F();
}
int main(){linkstack s;f1(&s);f2(&s,'A');f2(&s,'B');f2(&s,'C');f2(&s,'D');f3(s); f4(s);f5(&s); printf("出栈后");f4(s);
}
出栈一次
出栈两次