头歌大数据MapReduce 基础实战 头歌educoder数据结构答案
转载
第1关:栈操作及数进制转换的实现
1.头文件:
#ifndef _STACK_H_
#define _STACK_H_
#include <iostream> //C++语言
#include <malloc.h>
using namespace std; //C++语言
typedef int DataType;
结点结构体+结点结构体指针PNode:top
//采用链式栈
struct node //结点的结构体定义
{
DataType element; //结点的数据域
struct node * next; //结点的指针域
};
typedef struct node* PNode;//把struct node*型的结构体用别名PNode表示
//PNode n : 定义一个单个节点
3.定义结构体栈+结构体栈指针Stack:s
struct stack //定义结构体栈
{
PNode top; //定义(结点结构体指针类型)栈顶
};
typedef struct stack* Stack;//把struct stack* 型的结构体用别名Stack表示
4.栈空判断:isEmpty(s->top为空)
/*
函数名:isEmpty
函数功能:判定栈是否为空
函数参数:栈头结点指针
返回值:若栈为空,则返回1,否则返回0
*/
int isEmpty(Stack s) //int类型的栈空,返回整型1,0
{
//此处请填写代码,用于实现判定栈是否为空的功能
/********** Begin **********/
if(s->top==NULL) return 1; //栈头节点指针为空
else return 0;
/********** End **********/
}
5.创建空栈:createStack
/*
函数名:createStack
函数功能:创建一个空栈,实际上只需要初始化栈头结点
函数参数:无
返回值:栈头结点指针
*/
Stack createStack()
{
//此处请填写代码,用于创建一个空的链栈
/********** Begin **********/
Stack s = (Stack)malloc(sizeof(struct node);//分配空间s
s->top == NULL; //(*s).top 栈空
return s ; //返回s
/********** End **********/
}
6.压栈:push
/*
函数名:push
函数功能:向栈中压人一个数据元素值为x
函数参数:待压栈的数据元素,栈头结点指针
返回值:无
*/
void push(Stack s,DataType x) //压栈无返回
{
//表头作为栈顶,此处请填写代码实现压栈功能
/********** Begin **********/
PNode p = (PNode)malloc(sizeof(struct node);//分配空间->结点指针p
p->element = x; //结点数据域:p->element
p->next = s->top; //结点指针域:p->next
s->top = p; //类型一致:p
/********** End **********/
}
7.弹栈:pop
/*
函数名:pop
函数功能:弹出栈顶元素并返回元素值
函数参数:栈头结点指针
返回值:栈顶元素的值
*/
DataType pop(Stack s)
{
//此处请填写代码实现出栈并返回栈顶元素的功能,若栈为空,则返回-1
/********** Begin **********/
if(s->top == NULL) return -1;//栈空
else
{
PNode p = s->top; //p
DataType temp; //定义temp
temp = p->element; //p->element栈顶元素
s->top = s->top->next; //栈顶移动
free(p); //释放空间
return temp;
}
/********** End **********/
}
8.十进制转二进制:convert10to2
/*
函数名:convert10to2
函数功能:将十进制数x转换为二进制并输出
函数参数:十进制数x
返回值:无
*/
void print(Stack s) //print函数
{
PNode p = s->top; //栈顶
while(!isEmpty(s)) //s不为空栈
{
printf("%d ", pop(s));//打印栈顶元素
p = p->next; //栈顶移动
}
}
void convert10to2(int x)
{
//此处请填写代码实现将参数x转换为二进制并输出的功能,请使用上述栈的基本操作实现
/********** Begin **********/
Stack s = createStack(); //创建栈s
int m = x % 2; //余数m
push(s,m); //压栈m
int n = x/2; //除数n
int a = s->top->element; //栈顶元素a
while(n != 0) //除数存在
{
m = n % 2; //n的余数m
n = n /2 ; //n的除数n
push(s,m); //压栈m
}
print(s); //输出栈顶元素
/********** End **********/
}
完整代码(可以直接运行)
第一关:
#ifndef _STACK_H_
#define _STACK_H_
#include <stdio.h>
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int DataType;
//采用链式栈
struct node
{
DataType element; //数据元素
struct node * next; //指向下一个数据元素的指针
};
typedef struct node * PNode;
struct stack
{
PNode top;
};
typedef struct stack * Stack;
/*
函数名:isEmpty
函数功能:判定栈是否为空
函数参数:栈头结点指针
返回值:若栈为空,则返回1,否则返回0
*/
int isEmpty(Stack s)
{
//此处请填写代码,用于实现判定栈是否为空的功能
/********** Begin **********/
if (s->top == NULL)
return 1;
else
return 0;
/********** End **********/
}
/*
函数名:createStack
函数功能:创建一个空栈,实际上只需要初始化栈头结点
函数参数:无
返回值:栈头结点指针
*/
Stack createStack()
{
//此处请填写代码,用于创建一个空的链栈
/********** Begin **********/
//printf("2");
Stack s = (Stack)malloc(sizeof(struct stack));
s->top == NULL;
return s;
/********** End **********/
}
/*
函数名:push
函数功能:向栈中压人一个数据元素值为x
函数参数:待压栈的数据元素,栈头结点指针
返回值:无
*/
void push(Stack s,DataType x)
{
//表头作为栈顶,此处请填写代码实现压栈功能
/********** Begin **********/
PNode p = (PNode)malloc(sizeof(struct node));
p->element = x;
p->next = s->top;
s->top = p;
/********** End **********/
}
/*
函数名:pop
函数功能:弹出栈顶元素并返回元素值
函数参数:栈头结点指针
返回值:栈顶元素的值
*/
DataType pop(Stack s)
{
//此处请填写代码实现出栈并返回栈顶元素的功能,若栈为空,则返回-1
/********** Begin **********/
if(s->top == NULL) return -1;
else
{
PNode p = s->top;
DataType temp;
temp = p->element;
s->top = s->top->next;
free(p);
return temp;
}
/********** End **********/
}
/*
函数名:convert10to2
函数功能:将十进制数x转换为二进制并输出
函数参数:十进制数x
返回值:无
*/
void print(Stack s)
{
PNode p = s->top;
while(!isEmpty(s))
{
printf("%d", pop(s));
p = p->next;
}
}
void convert10to2(int x)
{
//此处请填写代码实现将参数x转换为二进制并输出的功能,请使用上述栈的基本操作实现
/********** Begin **********/
Stack s = createStack();
int m = x % 2;
push(s,m);
int n = x/2;
int a = s->top->element;
//printf("2");
while(n != 0)
{
m = n % 2;
n = n /2 ;
push(s,m);
}
print(s);
/********** End **********/
}
#endif
//主函数:
#include "stack.h"
int main(void)
{
int x;
cin>>x;
convert10to2(x);
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。