顺序栈
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct SeqNode{
char ch[MAXSIZE];
int top;
}Seqstack;
Seqstack* Initstack(){
Seqstack *s;
s = (Seqstack *)malloc(sizeof(Seqstack));
s->top = -1;
return s;
}
int Empty(Seqstack *s){
if(s->top == -1){
return 1;
}else{
return 0;
}
}
int Push(Seqstack* s,char ch){
if (s->top == MAXSIZE - 1){
return 0;
}else{
s->top++;
s->ch[s->top] = ch;
return 1;
}
}
int Pop(Seqstack* s){
if (Empty(s)){
return 0;
}else{
s->top --;
return 1;
}
}
char Gettop(Seqstack* s){
if (Empty(s)){
return 0;
}else{
return s->ch[s->top];
}
}
int main(void){
Seqstack *s;
char ch;
s = Initstack();
while (ch != 'e'){
scanf("%c",&ch);
Push (s,ch);
}
printf("%c", Gettop(s));
}
链栈
#include<stdio.h>
#include<stdlib.h>
typedef struct Liststack{
int x;
struct Liststack *next;
}List;
List *Initstack(){
List *s;
s = (List *)malloc(sizeof(List));
s->next = NULL;
return s;
}
int Empty(Liststack *s){
if (s->next == NULL){
return 1;
}else{
return 0;
}
}
List* Push(List *s,int j){
List *p;
p = (Liststack *)malloc(sizeof(List));
p->x = j;
p->next = s->next;
s->next = p;
return s;
}
List* Pop(List *s){
List *p;
p = s->next;
s->next = p->next;
free(p);
return s;
}
int Getlist(List *s){
return s->next->x;
}
int main (void){
List *s;
char ch;
s = Initstack();
scanf("%c",&ch);
Push (s,ch);
printf("%c", Getlist(s));
}