Educoder头歌数据结构栈基本运算的实现及其应用

本文介绍了如何使用顺序存储和链接存储实现栈的基本操作,包括Push、Pop和Top,并提供了具体的C语言代码实现。此外,还展示了如何利用栈进行数制转换,将十进制整数转换为指定基数的数制,例如二进制、八进制和十六进制。通过这些实践,有助于深入理解数据结构栈的应用。
摘要由CSDN通过智能技术生成

头歌实践平台答案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 **********/
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值