c语言 用两个队列实现一个栈(c语言 用两个队列实现一个栈的数据)
更新时间:2023-09-24本文目录
- 1.创建一个顺序栈,并写出出栈和入栈算法2.创建一个循环(顺序)队列,并写出出队和入队算法。求解答?
- 队列训练内容?
- 简述栈和队列的差别?
- js堆和栈的区别?
- 东北大学信息管理与信息系统专业数学学习哪些课程?
- 三分野介绍?
- 简述栈和队列的顺序存储结构和链式存储结构的优缺点?
- 二叉树的建立用栈还是队列?
1.创建一个顺序栈,并写出出栈和入栈算法2.创建一个循环(顺序)队列,并写出出队和入队算法。求解答?
这是我用链表结构实现的栈,以下是算法,顺序表部分没写,最近没什么时间,不好意思啦。。
#include<stdio.h>
#include<stdlib.h> //包括malloc()和realloc()函数的头文件
#include<math.h> //包括pow()函数的头文件
#define Max_stack_size 20
#define Addersize 10
typedef char Elemtype;
typedef struct{
Elemtype *base;
Elemtype *top;
int stacksize;
}sqStack;
void initStack (sqStack *s){ //初始化一个空栈
s->base=(Elemtype *)malloc(Max_stack_size*sizeof(Elemtype));
if(!s->base) exit(0);
s->top=s->base;
s->stacksize=Max_stack_size;
}
void pushStack(sqStack *s,Elemtype e){ //入栈操作
if(s->top-s->base>=s->stacksize)
{s->base=(Elemtype *)realloc(s->base,(s->stacksize+Addersize)*sizeof(Elemtype));
if(!s->base) exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+Addersize;}
*(s->top)=e;
s->top++;
}
void popStack(sqStack *s,Elemtype *e){ //出栈操作
if(s->top==s->base) return;
*e=*--(s->top);
}
void clearStack(sqStack *s) //清空栈
{
s->top=s->base;
}
void destroyStack(sqStack *s){ //销毁栈
int i;
int len;
len=s->stacksize;
for(i=0;i<len;i++)
{free(s->base);
s->base++;
}
s->base=NULL;
s->top=s->base;
s->stacksize=0;
}
int counterStack(sqStack s)
{return (s.top-s.base);}
void main()
{ sqStack p;
Elemtype c;
int i,sum,length;
sum=0;
printf(\initial:\\);
initStack(&p);
printf(\push the 8 scale:\\);
scanf(\%c\,&c); //输入数据时不能隔开,否则答案错误,空格也算字符
while(c!='#')
{pushStack(&p,c);
scanf(\%c\,&c);
}getchar();
length=counterStack(p); //有错时更容易检测到。。
printf(umbers'length:%d\\",length);
for(i=0;i<length;i++)
{popStack(&p,&c);
{sum=sum+(c-48)*pow(8,i);} //二进制pow(8,i)改为pow(2,i),十六进制用if else如/**/中所示
}
/* if('0'<c<'9') {sum=sum+(c-48)*pow(16,i);}
else if('A'<c<'Z') {sum=sum+(c-55)*pow(16,i);}
else if('a'<c<'z') {sum=sum+(c-87)*pow(16,i);}*/
printf(\"the answer is:%d\\",sum);
}
"队列训练内容?
队列训练内容?
您好,队列训练内容包括:
1. 队列的基本操作:入队、出队、判空、判满等。
2. 队列的实现方式:顺序队列、链式队列。
3. 队列的应用:广度优先搜索、模拟系统等。
4. 循环队列的实现和应用。
5. 队列的优化:队列的最大长度、队列的扩容等。
6. 队列与栈的比较与应用:队列和栈的不同、队列和栈的联系、队列和栈的应用等。
7. 队列的算法题解析:如队列的实现、队列的应用等相关算法题目的讲解和解析。
简述栈和队列的差别?
简述栈和队列的差别?
1、运算规则不同,栈是只允许在一端进行插入、删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。
2、用途不同,栈用于子程调用和保护现场,队列用于多道作业处理、指令寄存及其他运算等等。
js堆和栈的区别?
js堆和栈的区别?
js堆和栈主要区别两方面:
1、操作方式不同
栈由操作系统自动分配和释放,用于存放简单的数据段,占据固定大小的空间。
堆是自主分配和释放,若不主动释放,程序结束时由第三方回收。
2、数据结构不同
JavaScript通过数组的方式,模仿实现堆栈。
栈:栈是一种运算受限的线性表,把新元素放到栈顶元素的上面,使之成为新的栈顶元素称作进栈、入栈。
堆:堆是优先队列,也就是说队列中存在执行时会根据优先级找优先度最高的先执行。
东北大学信息管理与信息系统专业数学学习哪些课程?
东北大学信息管理与信息系统专业数学学习哪些课程?
东北大学信息管理与信息系统专业的数学课程包括以下内容:
1. 高等数学:包括函数、极限、导数、微分、积分、级数等内容。
2. 线性代数:包括向量、矩阵、线性方程组、特征值、特征向量等内容。
3. 概率论与数理统计:包括概率分布、随机变量、期望、方差、协方差、相关系数、假设检验等内容。
4. 离散数学:包括图论、组合数学、离散数学结构等内容。
5. 数学分析:包括实数、函数、级数、多元函数微积分等内容。
6. 数值计算:包括数值方法、插值、数值微积分、常微分方程数值解等内容。
7. 数据结构与算法:包括数组、链表、栈、队列、树、图等数据结构,以及排序、查找、图算法等内容。
以上是东北大学信息管理与信息系统专业数学课程的主要内容,学生需要通过这些课程的学习,掌握数学基础知识和方法,为后续的信息管理与信息系统专业学习和实践打下坚实的数学基础。
三分野介绍?
三分野介绍?
三分野指的是计算机科学中的三个领域,即算法、数据结构和编程技巧。
这三个领域是计算机科学的重要基础,是开发高效、可靠和可维护软件的关键。
其中,算法指的是解决问题的方法和步骤,包括时间复杂度、空间复杂度等概念;数据结构则是组织和管理数据的方式,如链表、栈、队列、树等;编程技巧则是程序员通过编写高效、易于维护的代码来提高软件开发的效率与质量。
三分野的理解、掌握和应用对计算机科学领域的学生和从业者都至关重要。
同时,在日常的编程工作中,三分野也是需要不断学习和提高的内容。
简述栈和队列的顺序存储结构和链式存储结构的优缺点?
简述栈和队列的顺序存储结构和链式存储结构的优缺点?
顺序栈--入栈操作受数组上界的约束有可能发生栈上溢,且需要地址连续的存储单元。
链栈--无须地址连续,便于多个栈共享存储单元,且不存在栈满上溢情况。
顺序队列--需地址连续且有假上溢现象(需改为循环队列才可解决假上溢)
链式队列--特别适合于数据元素变动比较大的情况,且不存在队列满而产生的溢出问题。
二叉树的建立用栈还是队列?
二叉树的建立用栈还是队列?
要构建二叉树及对二叉树进行操作首先得构建节点,节点包括节点的值还有它的左右孩子,
对二叉树的操作有构建,遍历(递归,非递归,层次遍历)。栈的特点是先进先出,用栈能保留二叉树的访问路径,所以二叉树的非递归遍历应该用栈来操作,队列是先进后出,用来层次打印二叉树。