#include <stdio.h>
#include <stdlib.h>
#define datatype char
#define MAXSIZE 100
typedef struct {
datatype data[MAXSIZE];
int top;
} SEQSTACK;
void shengcheng_kongzhan(SEQSTACK *s) {
s->top = -1;
}
int zhan_kong(SEQSTACK *s) {
return s->top == -1;
}
void ruzhan(SEQSTACK *s, datatype x) {
if (s->top == MAXSIZE - 1) {
printf("栈满\n");
} else {
s->top++;
s->data[s->top] = x;
}
}
datatype quzhanding(SEQSTACK *s) {
if (zhan_kong(s)) {
printf("栈空.\n");
return '\0';
} else {
return s->data[s->top];
}
}
datatype chuzhan(SEQSTACK *s) {
if (zhan_kong(s)) {
printf("栈空\n");
return '\0';
} else {
return s->data[s->top--];
}
}
void zhikong(SEQSTACK *s) {
s->top = -1;
}
int zhandu(SEQSTACK *s) {
return s->top + 1;
}
typedef struct zhanlian {
datatype data;
struct zhanlian *next;
} lianzhan;
lianzhan *top;
void chushihuazhan(lianzhan **top) {
*top = NULL;
}
int lianzhan_kong(lianzhan *top) {
return top == NULL;
}
void ruzhan_lianzhan(lianzhan **top, datatype x) {
lianzhan *p = (lianzhan *)malloc(sizeof(lianzhan));
if (p == NULL) {
printf("内存分配失败\n");
return;
}
p->data = x;
p->next = *top;
*top = p;
}
int main() {
SEQSTACK zhandu, *s;
char ch;
s = &zhandu;
shengcheng_kongzhan(s);
scanf("%c", &ch);
while (ch != '\n') {
ruzhan(s, ch);
scanf("%c", &ch);
}
printf("%d\n", zhandu(s));
while (!zhan_kong(s)) {
ch = quzhanding(s);
printf("%c", ch);
chuzhan(s);
}
printf("\n");
chushihuazhan(&top);
char lch;
printf("请输入链栈字符(以#结束):");
while (1) {
scanf(" %c", &lch);
if (lch == '#') break;
ruzhan_lianzhan(&top, lch);
}
printf("链栈中的元素:");
while (!lianzhan_kong(top)) {
printf("%c ", top->data);
lianzhan *temp = top;
top = top->next;
free(temp);
}
printf("\n");
return 0;
}