数据结构顺序栈学习记录

题目:

 

 算法思路

给定栈st,建立一个临时栈tmpst并初始化。由键盘输入数据入栈st,出栈st的所有元素x,当x不为1时将其进栈到tmpst中。将tmpst的所有元素出栈并进栈到st中。最后销毁临时栈tmpst。

程序代码

测试一,

#include <string.h>
#include "Sqstack1.cpp"				//包含前面的顺序栈基本运算函数
int main()
{
	int e=1,i,j;ElemType x;char A[j];//变量定义 
	SqStack st,tmpst;					//定义顺序栈st,tmpst
	InitStack(st);	
    InitStack(tmpst);	//栈tempst初始化 //栈st初始化  
	printf("输入数据\n");		//实现由键盘输入
	scanf("%d",A[j]);
	int n=strlen(A);
	for (i=0;i<n;i++)	{		//入栈  所有字符依次进栈st
		Push(st,A[i]);	}		
	while(!StackEmpty(st)){		//判断栈不空时,进行循环 
		Pop(st,x);				//出栈,元素赋值给x 
		if (x!='1')				//当x!=e时进栈 
		Push(tmpst,x);			//tmpst=9020209
		}
	while(!StackEmpty(tmpst)){	//判断栈不空时,进行循环 
		Pop(tmpst,x);			//tmp出栈 
		Push(st,x);				//x的值进栈st 
		printf("%c",x); }		
		if (!Pop(st,x))			//若栈下溢出,则返回0{	
		DestroyStack(tmpst);//销毁临时栈tmpst 
		return 0;
}			 

第一个问题 程序无报错,运行无结果,

错误一:scanf函数调用格式错误

问题:scanf函数 %d,%c,%s使用方法不熟悉

修改scanf("%s",A[j])

#include <string.h>
#include "Sqstack1.cpp"				//包含前面的顺序栈基本运算函数
int main()
{
	int e=1,i,j;ElemType x;char A[j];//变量定义 
	SqStack st,tmpst;					//定义顺序栈st,tmpst
	InitStack(st);	
    InitStack(tmpst);	//栈tempst初始化 //栈st初始化  
	printf("输入数据\n");		//实现由键盘输入
	scanf("%s",A[j]);
	int n=strlen(A);
	for (i=0;i<n;i++)	{		//入栈  所有字符依次进栈st
		Push(st,A[i]);	}		
	while(!StackEmpty(st)){		//判断栈不空时,进行循环 
		Pop(st,x);				//出栈,元素赋值给x 
		if (x!=e)				//当x!=e时进栈 
		Push(tmpst,x);			//tmpst=9020209
		}
	while(!StackEmpty(tmpst)){	//判断栈不空时,进行循环 
		Pop(tmpst,x);			//tmp出栈 
		Push(st,x);				//x的值进栈st 
		printf("%c",x); }		
		if (!Pop(st,x))			//若栈下溢出,则返回0{	
		DestroyStack(tmpst);//销毁临时栈tmpst 
		return 0;
}			 

程序任然错误

问题二:scanf函数输入字符串,遇到\0跳出 

修改scanf为gets函数

#include <string.h>
#include "Sqstack1.cpp"				//包含前面的顺序栈基本运算函数
int main()
{
	int e=1,i,j;ElemType x;char A[j];//变量定义 
	SqStack st,tmpst;					//定义顺序栈st,tmpst
	InitStack(st);	
    InitStack(tmpst);	//栈tempst初始化 //栈st初始化  
	printf("输入数据\n");		//实现由键盘输入
	scanf("%d",A[j]);
	int n=strlen(A);
	for (i=0;i<n;i++)	{		//入栈  所有字符依次进栈st
		Push(st,A[i]);	}		
	while(!StackEmpty(st)){		//判断栈不空时,进行循环 
		Pop(st,x);				//出栈,元素赋值给x 
		if (x!='1')				//当x!=e时进栈 
		Push(tmpst,x);			//tmpst=9020209
		}
	while(!StackEmpty(tmpst)){	//判断栈不空时,进行循环 
		Pop(tmpst,x);			//tmp出栈 
		Push(st,x);				//x的值进栈st 
		printf("%c",x); }		
		if (!Pop(st,x))			//若栈下溢出,则返回0{	
		DestroyStack(tmpst);//销毁临时栈tmpst 
		return 0;
}			

输出满足要求

修改代码,加入自动判断尾数

思路:由键盘输入数据入栈st,判断栈st的尾数为奇数or偶数,并对e赋值

	//添加下列代码
	GetTop(st,h)	;        //取栈顶数(尾数)值
    printf("栈顶的值=%d\n",h); //打印栈顶元素h
    if (h%2==0)                    //根据h奇偶,对e赋值
    e='0';
    else
    e='1';
    printf("e的值为%d\n",e);    //打印e的值

输出 

 

错误一:输出h和e的值,为ASCII码值

问题:对%d及%c的运用不熟悉

      %a(%A)     浮点数、十六进制数字和p-(P-)记数法(C99)
      %c             字符
      %d             有符号十进制整数
      %f              浮点数(包括float和doulbe)
      %e(%E)     浮点数指数输出[e-(E-)记数法]
      %g(%G)     浮点数不显无意义的零"0"
      %i              有符号十进制整数(与%d相同)
      %u             无符号十进制整数
      %o             八进制整数    e.g.     0123
      %x(%X)      十六进制整数0f(0F)   e.g.   0x1234
      %p             指针
      %s             字符串
      %%            "%"
————————————————
版权声明:本文为CSDN博主「zzb_max」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzb2019/article/details/89447920

解决方法:修改printf函数中整型%d为%c,

//修改%d
	for (i=0;i<n;i++)	{		//入栈  所有字符依次进栈st
		Push(st,A[i]);	}	
		GetTop(st,h)	;
		printf("栈顶的值=%c\n",h); //打印栈顶元素h
    if (h%2==0)                    //根据h奇偶,对e赋值
    e='0';
    else
    e='1';
    printf("e的值为%c\n",e);    //打印e的值
	

 输出结果

满足要求

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值