【数据结构】C语言栈的基本操作

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//定义节点
struct Node
{
    int data;
    struct Node *next;
};
typedef Node StackNode;
//定义栈
 struct Stack
{
    StackNode *top;
    StackNode *base;
};
 typedef Stack SqStack;
 //定义创建栈的函数
 int InitStack(SqStack *S)
 {
     S->base = (StackNode*)malloc(sizeof(Node));
     if (!S->base)
     {
         printf("error");
         exit(1);
     }
     S->top = S->base;
     return 0;
 }
 //定义压栈函数
 int PushStack(SqStack *S)
 {
     int e;
     StackNode *ps;
     ps = (StackNode *)malloc(sizeof(Node));
     if (!ps)
     {
         printf("error");
         exit(1);
     }
     printf("请输入你需要压入栈的数:");
     scanf_s("%d", &e);
     ps->data = e;
     ps->next = S->top;
     S->top = ps;
     return 0;
 }
 //定义弹栈函数
 int PopStack(SqStack *S)
 {
     int e;
     StackNode *ps;
     ps = S->top;
     S->top = S->top->next;
     e = ps->data;
     free(ps);
     return e;
 }
 //定义栈遍历函数
 int TravelStack(SqStack *S)
 {
    StackNode *ps;
    ps = S->top;
     while (ps != S->base)
     {
         printf("数据为:%d\n", ps->data);
         ps = ps->next;
     }
     return 0;
 }
 //定义判断栈是否为空函数
 bool EmptyStack(SqStack *S)
 {
     StackNode *ps;
     ps = S->top;
     if (ps == S->base)
     {
         return true;
     }
     else
     {
         return false;
     }
 }
 //定义清空栈的函数
 int ClearStack(SqStack *S)
 {
     StackNode *ps;
     ps = S->top;
     while (S->top != S->base)
     {
         S->top = S->top->next;
         free(ps);
     }
     return 0;
 }
 //主函数
 int main()
 {
     int i,dec,input,DEC;
     SqStack *stack;
     stack = new Stack;
     InitStack(stack);
     do{
         printf("请选择你需要的基本操作:\n");
         printf("1************往栈中加入数据\n");
         printf("2************遍历该栈\n");
         printf("3************清空该栈\n");
         printf("4************删除栈顶元素\n");
         scanf_s("%d", &i);
         switch (i)
         {
         case 1:
         {
             printf("是否想往栈中输入数据?是选择1/否选择2\t");
             scanf_s("%d", &dec);
             while (dec == 1)
             {
                 PushStack(stack);
                 printf("是否继续输入数据?是选择1/否选择2\t");
                 scanf_s("%d", &input);
                 dec = input;
             }
             printf("你输入的数据为:\n");
             TravelStack(stack);
             break;
         }
         case 2:
         {
             TravelStack(stack);
             break;
         }
         case 3:
         {
             ClearStack(stack);
             if (EmptyStack(stack))
             {
                 printf("该栈已经空!");
             }
             else
             {
                 printf("该栈不为空!");
             };
             break;
         }
         case 4:
         {
             int ReturnData;
             ReturnData = PopStack(stack);
             break;
         }
         }
         printf("是否要继续?是选择1/否选择2:\t");
         scanf_s("%d", &DEC);
     } while (DEC == 1);
 }
时间: 2024-08-27 11:47:37

【数据结构】C语言栈的基本操作的相关文章

【数据结构】用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等)

//[数据结构]用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等) //头文件 #ifndef _SEQ_STACK_ #define _SEQ_STACK_ #include <iostream> using namespace std; template <class Type> class SeqStack { public: SeqStack(size_t sz=INIT_SIZE) { capacity = sz > INIT_SIZE ? sz

SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具有两种基本操作方式,push 和 pop.push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出.现在我们就来验证一下堆栈的使用. Input 首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入. 对于每组测试数据,第一行输入两个正整数 m(1 <= m &

数据结构之顺序栈基本操作SqStack

顺序栈SqStack 基本操作 1 Status InitStack()//构造一个空栈S 2 Status DestroyStack()//销毁栈S,S不再存在 3 Status ClearStack()//把S置为空栈 4 Status StackEmpty()//若S为空栈,则返回true,否则返回false 5 int StackLength()//返回S的元素个数,即栈的长度 6 Status GetTop(SElemType &e)//若栈不空,则用e返回S的栈顶元素,并返回OK,否

栈(一)——栈的基本操作

1.栈的简介 栈是一种后入先出的数据结构,一般包含两种最基本的操作:入栈(push)和出栈(pop). 入栈操作:top指针上移,元素入栈. 出栈操作:top指针下移. 栈空的条件:top == bottom 栈满的条件:top == maxsize-1 2.有数据序列1 2 3一次存入一个栈stack中,则出栈顺序可以为以下四种: 1,2,3: 2,1,3: 3,2,1: 1,3,2. 3.任意输入一个十进制整数x(x<32768),输出x的二进制值. #include <stdio.h&g

数据结构C语言实现介绍

刚刚结束的大二上学期学习了数据机构C语言版这门课,在接下来的一个月中准备把课程的代码和知识点总结一下,就有了这个专题:数据结构C语言实现,在这里我将用C语言实现最基本的数据结构以及一些基本的算法,以下是我这个专题的内容: 1. 数据结构及算法简介: 主要介绍数据结构及算法的基础知识,一些基本的概念和术语,以及算法的定义.算法的特性.算法的时间复杂度和空间复杂度 2.顺序表的定义及算法实现: 主要介绍顺序表的定义及特点,实现顺序表的存储结构以及基本操作 3.单链表的定义及算法实现:  主要介绍单链

【数据结构】3. 栈和队列

目录 3.1 栈 3.1.1 栈的基本概念 (1)栈的定义 (2)栈的基本操作 3.1.2 栈的顺序存储结构 (1)顺序栈的实现 (2)栈的基本运算 (3)共享栈 3.1.3 栈的链式存储结构 3.2 队列 3.2.1 队列的基本概念 (1)队列的定义 (2)队列常见的基本操作 3.2.2 队列的顺序存储结构 (1)队列的順序存储 (2)循环队列 (3)循环队列的操作 3.2.3 队列的链式存储结构 (1)队列的链式存储 (2)链式队列的基本操作 3.2.4 双端队列 3.3 栈和队列的应用 3

实现基于数据结构的语言

创建任何 DSL 都应该从定义需要解决的问题开始.这里,我们需要定义一个 DSL 库(有时也称为组合库,combinators library),用于二维图形,这是一个很明显的选择.这个示例演示如何用大量简单的基本图形构建出复杂的结构.在计算机屏幕上的图像本质上就是线条和多边形的集合,尽管显示出来的图形可能极其复杂.这个示例用四个模块表现:第一,清单 12-1,提供创建图片的基本操作(primitives):第二,清单12-2,如何实现解释图片:清单 12-3 和清单 12-4 用示例演示如何使

数据结构与算法-栈和队列

一.简介 众所周知,线性表是数据结构的基础,通常有两种实现方式:数组和链表.栈和队列是最常用的数据结构,它们基于线性表实现. 二.栈 定义:栈是限定仅在表尾进行插入和删除操作的线性表,即FILO. 栈被经常类比于弹夹,即先被压如弹夹的子弹最后被打出.根据线性表的实现方式得知,栈的实现方式有两种:数组实现和链表实现. 栈的数组实现: package basic.data_structure.cha01; /** * 栈:先进后出(FILO),只允许在栈顶操作元素 * 栈的基本操作: * 初始化栈.

数据结构 【实验7 二叉树基本操作】

实验7   二叉树基本操作 实验目的 1.  熟悉二叉树结点的结构和对二叉树的基本操作. 2.  掌握对二叉树每一种操作的具体实现. 3.  学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法. 实验内容 该程序的功能是实现二叉树结点的类型定义和对二叉树的基本操作.该程序包括二叉树结构类型以及每一种操作的具体的函数定义和主函数. /* 定义DataType为char类型 */ typedef char DataType; /* 二叉树的结点类型 */ typedef struct Bit