栈和队列及其应用

实验三:栈和队列及其应用

  1. 实验项目名称:栈和队列及其应用
  2. 实验目的及要求:
    实验目的
    (1)理解栈和队列数据类型的动态分配顺序存储结构的表示和运算的C语言实现。
    (2)掌握栈和队列结构在实际中的应用。
    要求:
    (1)设计栈和队列的顺序存储结构(动态分配存储空间);
    (2)在顺序存储结构下实现抽象数据类型中定义的各种基本操作。
    (3)利用栈和队列的基本操作:设计十进制数转换成二进制数的算法,二进制数转换成八进制数的算法,二进制数转换成十六进制数的算法。
    3.实验原理
    利用栈先进后出,队列先进先出。
    十进制数N转换成d进制数原理:
    N = (N div d)×d + N mod d; (其中:div为整除运算,mod为求余运算)
    75 = (75/2)*2 + 75%2
    例:(75)10 = (1001011)2
    N (N div 2) N mod 2
    75 37 1
    37 18 1
    18 9 0
    9 4 1
    4 2 0
    2 1 0
    1 0 1
    先进后出:
    数据生成的顺序:1,1,0,1,0,0,1
    读出的顺序:1,0,0,1,0,1,1
    二进制数转换成八进制数和十六进制数原理:
    三位二进制合为一位八进制数,四位二进制合为一位十六进制数。
    队列先进先出。
    二进制数转换成八进制数:
    (1001011)2 = (1,001,011)2=(113)8
    二进制数转换成十六进制数:
    (1001011)2 = (100,1011)2 =(4B)16
    4.实验内容:
    通过键盘接收数据,将十进制数转换成二进制数,再将二进制数转换成八进制数和十六进制数。
    实验步骤:
    (1)接收一个十进制整数。
    (2)利用栈将十进制数转换成二进制数。输出显示二进制数,出栈的同时各位进入队列1和队列2。
    (3)利用队列将队列1中的二进制数转换成八进制数,输出显示。
    (4)利用队列将队列2中的二进制数转换成十六进制数,输出显示。
    5.实验结果与分析:
    (1)分析实验中所遇到的问题,自己的解决思路及实现方法。
    (2)写出自己所用的测试用例,并记录结果。
    (3)总结本次实验的收获。
#include <stdio.h>
#include "stdlib.h"
#include "math.h"
#define STACK_INIT_SIZE 10  // initial allocation of the stack
#define STACKINCREMENT  10// storage increment
#define element int

typedef struct{
   
    element *base;
    element *top;  //stack top pointer
    int stackSize;
} sqStack;


typedef struct qNode{
   
    element data;
    struct qNode *next; // queue next pointer
}qNode, *queuePtr;

typedef struct {
   
    queuePtr front; // queue front pointer
    queuePtr rear; // queue rear pointer
    int length; // queue length
}linkQueue;

// construct an empty queue. return 1 if initialization is successful, 0 otherwise.
int initQueue(linkQueue **qq){
   
    *qq = (linkQueue *)malloc(sizeof(linkQueue));
    linkQueue *q  = *qq;
    q->front = q->rear = (queuePtr)malloc(sizeof(qNode));
    // storage allocation failed
    if(!q->front){
   
        return 0;
    }
    q->front->next = NULL;
    (*qq)->length = 0;
    return 1;
}
// enqueue, return 1 if initialization is successful, 0 otherwise.
int enQueue(linkQueue **qq, element e){
   
    queuePtr p = 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值