数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码)

2024-03-11 10:20

本文主要是介绍数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、

二、初始化一个空的顺序栈

三、判断顺序栈是否为空

四、判断顺序栈是否已满

五、压栈push:插入数据元素x

六、弹栈pop:删除元素

七、取栈顶元素

 八、利用栈实现数进制转换

1.弹出元素->输出

2.data转换成k进制

创建栈L

转换成二进制:

转换成八进制:

转换成16进制:

1.定义: 

 2.除法(n ≠ 0) push

 3.pop

#include <stdio.h>
#include<stdlib.h>
/*此处是顺序栈数据结构定义*/
typedef int DataType;
struct seqStack
{//有3个数据成员int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM   int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可  整型  curNumDataType* element;//用于存放顺序栈数据元素的连续空间的起始地址  
};
typedef struct seqStack* PseqStack;//第一关
PseqStack createNullStack_seq(int m)
{//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0//若m=0,则返回NULL PseqStack p = (PseqStack)malloc(sizeof(struct seqStack));//动态创建一个PseqStack类型的变量p,//不小于 sizeof(struct seqStack)字节 if (m != 0)  //m:能存放的最大元素个数 {p->element = (DataType*)malloc(m * sizeof(DataType));//元素分配空间 if (p->element){p->top = 0;   //下溢:空栈进行出栈 p->MAXNUM = m;//上溢: 已有m个元素进行进栈 return p; }else free(p);}return NULL;
}//第二关
int isNullStack_seq(PseqStack L)
{//判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1if (L == NULL)         return -1;else {if (L->top == 0)   return 1;else   return 0; }
}//第三关 
int isFullStack_seq(PseqStack L)
{//判断顺序栈是否已满,若已满,返回值为1,否则返回值为0if (L->top >= L->MAXNUM)return 1;elsereturn 0;
}//第四关
int push_seq(PseqStack L, DataType x)
{//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1if (L->top >= L->MAXNUM)return 0;else{L->top = L->top + 1;     //栈顶=栈顶+1 L->element[L->top] = x;  //给结构体 L中一个数组成员element[]的某一个L->top赋值return 1;}}//第五关
DataType pop_seq(PseqStack L)
{//弹栈并返回删除元素,若栈为空,则返回-1if (L->top == 0)return -1;else{int m = L->element[L->top];//定义栈顶元素m L->top = L->top - 1;       //栈顶=栈顶-1 return m;                  //返回m }
}//第六关 取栈顶元素 
DataType top_seq(PseqStack L)
{//取栈顶元素返回,若栈为空,则返回-1if (L->top == 0)return -1;    //返回-1 elsereturn (L->element[L->top]);//返回栈顶元素 
}
//销毁顺序栈,释放栈所占存储空间
int destroystack_seq(PseqStack L)
{//返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0if (L != NULL){int num = L->top + 1;//定义num(销毁的栈中现有数据元素的个数0-top) L->MAXNUM = 0;       //能存放的最大元素个数为0(待销毁的线性表不存在) free(L->element);    //释放元素 ,销毁线性表 return num;          //返回 }return 0;
}//第七关
//使用已实现的栈操作,实现数制转换
void print(PseqStack L)
{//逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号while (L->top != 0){printf("%d", pop_seq(L));}
}void convert(int data, int k)
{//利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果//十六进制时输出 A ,B ,C, D,E,F 使用大写字母PseqStack L = createNullStack_seq(200);if (k == 2){int m = data % 2;push_seq(L, m);int n = data / 2;while (n != 0){m = n % 2;n = n / 2;push_seq(L, m);}print(L);}if (k == 8){int m = data % 8;push_seq(L, m);int n = data / 8;while (n != 0){m = n % 8;n = n / 8;push_seq(L, m);}print(L);}if (k == 16){int m = data % 16; char c;if (m >= 10){c = m - 10 + 'A';}push_seq(L, c);int n = data / 16;while (n != 0){m = n % 16;n = n / 16;if (m >= 10){c = m - 10 + 'A';}else{c = m + '0';}push_seq(L, c);}while (L->top != 0){printf("%c", pop_seq(L));}}
}

这篇关于数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797524

相关文章

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio