数据结构头歌: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

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索