头歌实践平台答案educoder
数据结构-栈基本运算的实现及其应用
第1关:顺序栈的实现
/*************************************************************
顺序存储的栈 实现文件
更新于2020年4月27日
**************************************************************/
void SS_Push(SqStack &S, ElemType e)
// 插入元素e为新的栈顶元素
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
//判断判断栈是否已满
if(! SS_IsFull(S))
{
S.top++;
S.elem[S.top] = e;
}
/********** End **********/
}
void SS_Pop(SqStack &S, ElemType &e)
// 删除S的栈顶元素,用e返回其值
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!SS_IsEmpty(S))
{
e = S.elem[S.top] ;
S.top--;
}
/********** End **********/
}
void SS_Top(SqStack S, ElemType &e)
// 获取栈顶元素赋给e
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
e = S.elem[S.top] ;
/********** End **********/
}
第2关:链栈的实现
/*************************************************************
链接存储的栈 实现文件
更新于2020年4月27日
**************************************************************/
void LS_Push(LinkStack &S, ElemType e)//将元素e进栈
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
/*创建临时指针
*/
StackNode *q = (StackNode*)malloc(sizeof(StackNode));
q->data = e;
q->next = S;
S = q;
/********** End **********/
}
void LS_Pop(LinkStack &S, ElemType &e)//出栈。出栈元素赋给e
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!LS_IsEmpty(S)){
StackNode* p = S;
e = p->data ;
S = S->next;
free(p);
}
/********** End **********/
}
void LS_Top(LinkStack S, ElemType &e)//读栈顶元素赋给e。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
if(!LS_IsEmpty(S))
e = S->data;
/********** End **********/
}
第3关:利用栈实现数制转换
/*************************************************************
利用栈实现数制转换 实现文件
更新于2020年4月27日
**************************************************************/
void Conversion(int N, int r)
// 利用栈将十进制整数N转换成r进制数(如:二、八、十六进制)
// 输出转换的结果
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
// 1.顺序栈的初始化,即构造一个空的顺序栈
SqStack S;
SS_Initiate(S);
//2.计算
int i;
char X[] = {'0','1','2','3','4','5','6',
'7','8','9','A','B','C','D','E','F'};
while(N!=0)
{
if(!(SS_IsFull(S)))
{
SS_Push(S,N%r);
N = N/r;
}
}
while(!SS_IsEmpty(S)){
SS_Pop(S, i);
printf("%c",X[i]);
}
//以上我使用字符数组,当然你也可以使用ASCII码实现转换
/********** End **********/
}