首页 > 其他分享 >栈笔试题1

栈笔试题1

时间:2024-04-25 10:57:51浏览次数:20  
标签:SeqStack return DataType 笔试 int Manager 顺序

设计一个进制转换程序,使用顺序栈设计一个把十进制数转换为十六进制数的接口,实现当通过键盘输入一个非负的十进制数,可以在终端输出对应的十六进制数。

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// 定义错误码
#define ERROR_STACK_FULL -1

// 定义顺序栈元素的数据类型
typedef int DataType_t;

// 定义顺序栈的管理结构体
typedef struct SequenceStack {
    DataType_t *Bottom;  // 栈底地址
    unsigned int Size;   // 栈容量
    int Top;             // 栈顶元素的下标
} SeqStack_t;

// 创建顺序栈并初始化
SeqStack_t* SeqStack_Create(unsigned int size) {
    SeqStack_t* Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t));
    if (Manager == NULL)
	{
        perror("calloc memory for manager is failed");
        exit(-1);
    }

    Manager->Bottom = (DataType_t *)calloc(size, sizeof(DataType_t));
    if (Manager->Bottom == NULL) 
	{
        perror("calloc memory for Stack is failed");
        free(Manager);
        exit(-1);
    }

    Manager->Size = size;
    Manager->Top = -1;

    return Manager;
}

// 判断顺序栈是否已满
bool SeqStack_IsFull(SeqStack_t* Manager) 
{
    return Manager->Top + 1 == Manager->Size;
}

// 入栈
int SeqStack_Push(SeqStack_t* Manager, DataType_t Data) 
{
    if (SeqStack_IsFull(Manager)) {
        return ERROR_STACK_FULL;
    }

    Manager->Bottom[++Manager->Top] = Data;
    return 0;
}

// 判断顺序栈是否为空
bool SeqStack_IsEmpty(SeqStack_t* Manager) 
{
    return Manager->Top == -1;
}

// 出栈
DataType_t SeqStack_Pop(SeqStack_t *Manager)
{
    DataType_t temp = 0;  //用于存储出栈元素的值

	//1.判断顺序栈是否为空
	if ( SeqStack_IsEmpty(Manager) )
	{
		printf("SeqStack is Empty!\n");
		return ERROR_STACK_FULL;
	}
}

// 遍历顺序栈元素并打印
void SeqStack_Print(SeqStack_t* Manager) 
{
    printf("它的十六进制数:0x");
    for (int i = 0; i <= Manager->Top; ++i) {
        printf("%d", Manager->Bottom[i]);
    }
    printf("\n");
}

// 释放顺序栈占用的内存
void SeqStack_Destroy(SeqStack_t* Manager) 
{
    free(Manager->Bottom);
    free(Manager);
}

int main(int argc, char const *argv[]) 
{
    SeqStack_t *top = SeqStack_Create(10);//创建一个顺序栈
    DataType_t data ;                     //定义顺序栈元素的数据类型
    printf("请输入一个非负数的整数:");
    scanf("%d",&data);
    while(data)
    {
        SeqStack_Push (top, data%16);     //把输入的数取余 
        data = data/16;                   //取余后记录剩下的元素
    }
    DataType_t p;                         //定义一个数用于输出遍历
    while (1)
    {        
        p = SeqStack_Pop(top);              
        SeqStack_Print(top) ;             //数据出栈遍历
        if (!SeqStack_IsEmpty(top))       //判断栈是否为空,为空就退出
        {
            break;
        }
        
    }
    

    return 0;
}

标签:SeqStack,return,DataType,笔试,int,Manager,顺序
From: https://www.cnblogs.com/-110/p/18157080

相关文章

  • 数据结构笔试题——基于C语言的链表功能函数实现
    题目1题目要求如下:/***@functionname:LList_CntdmFind*@brief查找链表中,倒数第k个位置上的节点*@param:​ @Head:链表头节点​ @k :倒数第k个位置*@retval:int型返回值;返回-1时即为失败,返回0时表示成功;*@date:2024/04/23*@version1.0*@n......
  • 数据结构链表笔试题
    /***********************************************************************************************funcname:Minnote_Del*function:Deletetheminnodeoflinklist*funcparameter:*@Head:addressoftheh......
  • 链表笔试题
    链表笔试题假设该链表只给出了头指针head。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k(k为正整数)个位置上的结点。若查找成功,算法输出该结点的data值,并返回1;否则只返回0。要求:(1)描述算法的基本设计思想.(2)描述算法的详细实现步骤.(3)根据......
  • 笔试题:查找链表中倒数第k(k为正整数)个位置上的结点
    数据结构链表笔试题:(1)算法的基本设计思想:定义两个结构体指针FPhead和SPhead,其中,FPhead需要从头遍历链表,当FPhead和SPhead之间的距离相差k-1,则调动SPhead开始遍历链表,从而确定倒数第k个位置上的结点。(2)算法的详细实现步骤:定义一个整型变量用来储存两个结构体指针FPhead和SP......
  • 数据结构链表笔试题
    数据结构链表笔试题笔试题3:设计一个算法删除单链表L(有头结点)中的一个最小值结点/********************************************************************* 函数名称: LList_Del* 函数功能:删除链表中最小值节点* 函数参数: * @L:传递头节点的地址*返回......
  • 笔试题
    笔试题己知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)。intSeqList_Remove(*L,intp){ //判断顺序表的地址是否有效 if(NULL==L) { return0; } inte=0;//变量e,记录待删除元素......
  • 笔试题:设计一个算法删除单链表L(有头结点)中的一个最小值结点
    数据结构——笔试题设计一个算法删除单链表L(有头结点)中的一个最小值结点/*********************************************************funcname:DelMinNode*author:[email protected]*date:2024/04/22*function:删除单链表L(有头结点)中的一个最......
  • 已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持
    已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)(笔试题)/********************************************************name:SeqAdd* function:(笔试题)已知一个顺序表L,其中的元......
  • 数据结构笔试题 Day 1
    笔试题1已知一个顺序表L,其中的元素递增有序排列,设计一个算法,插入一个元素x(x为int型)后保持该顺序表仍然递增有序排列(假设插入操作总能成功)./递增排序12304055voidSeqList_Insert(SeqList*L,intx){inttemp=-1;//记录待插入元素的下标//遍历......
  • 银行笔试——金融知识
    货币的基本职能:价值尺度和流通手段什么是准备金:货币发行准备制度是为约束货币发行规模、维护货币信用而制定的,要求货币发行者在发行货币时必须以某种金属或资产作为发行准备。在金属货币流通条件下,准备金有三项用途:(1)作为国际支付的准备金;(2)作为时而扩大时而收缩的国内金属流通的......