C语言实现链栈相关操作

简介: 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
    int data;
    struct Stack *next;
} Stack;
/**
 * 初始化链表
 * @param S
 */
void InitList(Stack **S) {
    //申请头节点
    Stack *p = (Stack *) malloc(sizeof(Stack));
    if (p == NULL) {
        printf("%s函数执行,申请内存失败\n", __FUNCTION__);
    }
    *S = p;
};
/**
 * 获取输入值
 * @param list
 */
void GetInput(Stack *list) {
    Stack *temp = list;
    printf("请输入值\n");
    temp->next = NULL;
    scanf("%d", &temp->data);
}
/**
 * 创建节点
 * @param list
 */
void CreateNode(Stack **list) {
    Stack *temp = (Stack *) malloc(sizeof(Stack));
    if (temp == NULL) {
        printf("%s函数执行,申请内存失败\n", __FUNCTION__);
    }
    GetInput(temp);
    *list = temp;
}
/**
 * 入栈
 * @param S
 * @return
 */
_Bool Push(Stack *S) {
    Stack *temp = NULL;
    CreateNode(&temp);
    temp->next = S->next;
    S->next = temp;
    return true;
}
/**
 * 出栈
 * @param S
 * @return
 */
_Bool Pop(Stack *S) {
    if (S->next == NULL) {
        printf("空栈 \n");
        return false;
    }
    Stack *temp = NULL;
    temp = S->next;
    S->next = temp->next;
    free(temp);
    return true;
}
/**
 * 获取栈顶元素
 * @param S
 * @return
 */
_Bool GetTop(Stack *S) {
    if (S->next == NULL) {
        printf("空栈 \n");
        return false;
    }
    Stack *temp = NULL;
    temp = S->next;
    printf("栈顶的值为:%d \n", temp->data);
    return true;
}
/**
 * 打印栈内所有内容
 * @param list
 */
void PrintList(Stack *list) {
    Stack *temp = list;
    if (temp == NULL) {
        printf("%s函数执行,链表为空\n", __FUNCTION__);
    } else {
        while (temp->next) {
            temp = temp->next;
            printf("栈内元素的值为:%d \n", temp->data);
        }
    }
    putchar('\n');
}
int main() {
    Stack *s;
    InitList(&s);
    Push(s);
    Push(s);
    PrintList(s);
    GetTop(s);
    Pop(s);
    Pop(s);
    GetTop(s);
    Pop(s);
    return 0;
}
目录
相关文章
|
5月前
|
Linux C语言
Linux系统下C语言的队列操作
Linux系统下C语言的队列操作
103 0
|
5月前
|
算法 C语言
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
|
5月前
|
编译器 C语言
嵌入式C语言变量、数组、指针初始化的多种操作
嵌入式C语言变量、数组、指针初始化的多种操作
45 0
|
5月前
|
C语言
C语言内存及堆栈操作
C语言内存及堆栈操作
30 0
|
10月前
|
C语言
三子棋真是太神奇啦~~~C语言三子棋小游戏详解,具体到每一步操作的解释说明,不信你学不会!
三子棋真是太神奇啦~~~C语言三子棋小游戏详解,具体到每一步操作的解释说明,不信你学不会!
55 2
|
3月前
|
语音技术 C语言 Windows
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
语音识别------ffmpeg的使用01,ffmpeg的安装,会做PPT很好,ffmpeg不具备直接使用,只可以操作解码数据,ffmpeg用C语言写的,得学C语言,ffmpeg的安装
|
4月前
|
C语言
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
|
5月前
|
存储 C语言
c语言:文件处理操作-3
c语言:文件处理操作
40 0
|
5月前
|
C语言 C++
c语言:文件处理操作-2
c语言:文件处理操作
39 0
|
5月前
|
存储 编译器 C语言
c语言:文件处理操作-1
c语言:文件处理操作
25 0