编辑代码

#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;
}