栈的应用-数据结构(C语言)

导读:本篇文章讲解 栈的应用-数据结构(C语言),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

数列反转

#include <stdio.h>
#include <stdlib.h>

#define ERROR 0
#define OK 1

typedef struct Stack {
    int *elements;
    int max_size, top_index;
} Stack;

void init(Stack *s, int length) {
    s->elements = (int *)malloc(sizeof(int) * length);
    s->max_size = length;
    s->top_index = -1;
}

int push(Stack *s, int element) {
    if (s->top_index >= s->max_size - 1) {
        return ERROR;
    }
    s->top_index++;
    s->elements[s->top_index] = element;
    return OK;
}

int pop(Stack *s) {
    if (s->top_index < 0) {
        return ERROR;
    }
    s->top_index--;
    return OK;
}

int top(Stack *s) {
    return s->elements[s->top_index];
}

// 请在下面实现判断栈是否为空的函数 empty
// 1. 在此之前,我们先定义一个 返回值为 int 类型,只有Stack 类型的指针参数 s 的函数 empty. 该函数 用来判断当前栈是不是为空,后面的数列翻转我们会用到这个函数。
// 2. 还记得怎么判断栈是否为空,只要看栈s  top_index 是否小于0 即可.  如果是的话,那么就返回 1 来结束函数,
// 3.如果top_index 不是小于 0, 那就用else 返回 0 结束函数。
// 4.  这样我们就写好了 empty 函数,接下来让我们在 主函数里完成 数列翻转吧。 首先,我们先定义两个 int  类型的变量 n 和 num , n  表示输入元素的个数, num 表示
输入的元素, 定义好后再输入 n.
// 5. 接下来我们定义一个 栈 Stack  的指针变量 stack  ,并 分配一个 Stack 类型 大小的内存,之后调用初始化 函数 init , 参数分别为 stack 和 n,  表示栈里最多有 n 个 元素。
// 6. 接下来我们要 循环输入 n 个数,然后依次插入到栈里。
我们先把for 写好, 借用变量 i 从1 循环到n,


int empty(Stack *s) { 
     if(s->top_index < 0) {
         return 1;
     } else {
         return 0;
     }

}

void clear(Stack *s) {
    free(s->elements);
    free(s);
}

int main() {
    int n, num; 
    scanf("%d", &n);
    Stack *stack  = (Stack *)malloc(sizeof(Stack)); 
    init(stack, n);
    // 7. 接下来,我们输入一个元素记录在 num 里,然后调用 push 函数讲 num 插入到 stakc 里。
    for(int i = 1; i <=n; i++) {
        scanf("%d",&num);
        push(stack, num);
    }
    // 我们把 n 个 数插入到 stack 里后,接下来把n 个数依次弹出 即可以实现数列的翻转了。
    //  我们写一个 while 循环, 如果栈非空,那么就依次访问栈的元素,然后删除栈顶元素。这里我们可以调用 empty函数来 判断stack 是否为空,循环条件是栈非空。
   //  我们先把while 循环写好
   // 现在我们把while 写全,先调用top 函数 求出此时栈 stack 的栈顶元素并输出。
   // 为了显示得 更加清晰,我们在输出后再输出个空格,然后再调用 pop 函数 把当前栈 stack 的栈顶元素删除了。
   
    while(!empty(stack)) {
        printf("%d ", top(stack));
        pop(stack);
    } 
    clear(stack);
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76959.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!