c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言 用两个队列实现一个栈(c语言 用两个队列实现一个栈的数据)

更新时间:2023-09-24

本文目录

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. 数据结构与算法:包括数组、链表、栈、队列、树、图等数据结构,以及排序、查找、图算法等内容。

以上是东北大学信息管理与信息系统专业数学课程的主要内容,学生需要通过这些课程的学习,掌握数学基础知识和方法,为后续的信息管理与信息系统专业学习和实践打下坚实的数学基础。

三分野介绍?

三分野介绍?

三分野指的是计算机科学中的三个领域,即算法、数据结构和编程技巧。
这三个领域是计算机科学的重要基础,是开发高效、可靠和可维护软件的关键。
其中,算法指的是解决问题的方法和步骤,包括时间复杂度、空间复杂度等概念;数据结构则是组织和管理数据的方式,如链表、栈、队列、树等;编程技巧则是程序员通过编写高效、易于维护的代码来提高软件开发的效率与质量。
三分野的理解、掌握和应用对计算机科学领域的学生和从业者都至关重要。
同时,在日常的编程工作中,三分野也是需要不断学习和提高的内容。

简述栈和队列的顺序存储结构和链式存储结构的优缺点?

简述栈和队列的顺序存储结构和链式存储结构的优缺点?

顺序栈--入栈操作受数组上界的约束有可能发生栈上溢,且需要地址连续的存储单元。

链栈--无须地址连续,便于多个栈共享存储单元,且不存在栈满上溢情况。

顺序队列--需地址连续且有假上溢现象(需改为循环队列才可解决假上溢)

链式队列--特别适合于数据元素变动比较大的情况,且不存在队列满而产生的溢出问题。

二叉树的建立用栈还是队列?

二叉树的建立用栈还是队列?

要构建二叉树及对二叉树进行操作首先得构建节点,节点包括节点的值还有它的左右孩子,

对二叉树的操作有构建,遍历(递归,非递归,层次遍历)。栈的特点是先进先出,用栈能保留二叉树的访问路径,所以二叉树的非递归遍历应该用栈来操作,队列是先进后出,用来层次打印二叉树。