java顺序栈测试代码 java顺序排列代码

用栈检测括号匹配#include stdio.h
#include string.h
#define MaxSize 100
typedef char ElemType;//定义数据类型
//定义顺序栈
typedef struct
{
ElemType data[MaxSize];//数据域
int top;//栈顶指针
}SeqStack;
//栈初始化
int InitStack(SeqStack *s)
{
s-top=-1;//初始化栈顶,指向空
return 1;
}
//入栈
int Push(SeqStack *s,ElemType x)
{
if (s-top == MaxSize -1 )
{
printf("栈已满,不能入栈.\n");
return 0;
}
else
{
s-top;//栈顶指针上移
s-data[s-top] = x;//数据元素入栈
}
return 1;
}
//出栈
int Pop(SeqStack *s,ElemType *x)
{
if (s-top == -1)
{
printf("栈为空,不能出栈.\n");
return 0;
}
else
{
*x=s-data[s-top];//取出栈顶元素值
s-top--;//栈顶指针下移
}
return 1;
}
//取栈顶值
int GetTop(SeqStack *s,ElemType *x)
{
if (s-top == -1)
{
printf("栈为空,不能取值.\n");
return 0;
}
else
{
*x=s-data[s-top];//取出栈顶元素值
}
return 1;
}
//判断栈是否为空
int IsEmpty(SeqStack *s)
{
if(s-top==-1)
return 1;
return 0;
}
int Check(char str[],int len)
{
int i;
int flag=1;//合法标志0-不合法 1-合法
int exist=0;//小括号存在标志 0-不在 1-在
ElemType x;
SeqStack s;//栈s
//栈初始化
InitStack(s);
for(i=0;ilen;i)
{
if(str[i]=='{')//大括号{
{
if(IsEmpty(s))//栈空 , 直接入栈
{
if(Push(s,str[i])!=1)
{
flag=0;
break;
}
}
else//栈非空,判断合法性
{
if(GetTop(s,x)!=1)//取栈顶值
{
flag=0;
break;
}
if(x=='{' || x=='[' || x== '(')//如果是{,[或者(,非法
{
flag=0;
break;
}
else//否则入栈
{
if(Push(s,str[i])!=1)
{
flag=0;
break;
}
}
}
}
else if(str[i]=='[')//方括号[
{
if(IsEmpty(s))//栈空 , 直接入栈
{
if(Push(s,str[i])!=1)
{
flag=0;
break;
}
}
else//栈非空,判断合法性
{
if(GetTop(s,x)!=1)//取栈顶值
{
flag=0;
break;
}
if(x=='[' || x== '(')//如果是[或者(,非法
{
flag=0;
break;
}
else//否则入栈
{
if(Push(s,str[i])!=1)
{
flag=0;
break;
}
}
}
}
else if(str[i]=='(')//小括号(
{
//直接入栈
if(Push(s,str[i])!=1)
{
flag=0;
break;
}
exist=1;//小括号存在
}
else if(str[i]==')')//小括号)
{
if(Pop(s,x)!=1)
{
flag=0;
break;
}
if(x!='(')//如果出栈非(,非法
{
flag=0;
break;
}
}
else if(str[i]==']')//方括号]
{
if(Pop(s,x)!=1)
{
flag=0;
break;
}
if(x!='[')//如果出栈非[,非法
{
flag=0;
break;
}
if(exist==0)//小括号不存在,单独[],非法
{
flag=0;
break;
}
}
else if(str[i]=='}')//大括号}
{
if(Pop(s,x)!=1)
{
flag=0;
break;
}
if(x!='{')//如果出栈非{ , 非法
{
flag=0;
break;
}
if(exist==0)//小括号不存在,单独[],非法
{
flag=0;
break;
}
}
else//其它字符跳过
continue;
}
if(!IsEmpty(s))//循环完毕,栈非空,非法
flag=0;
return flag;
}
//主函数
int main(void)
{
char str[MaxSize];//录入字符串
int i,len;
while(1)
{
printf("输入字符串\n");
gets(str);
len=strlen(str);
if(len=MaxSize)//超过定义长度
return 1;
if(Check(str,len)==1)
printf("匹配合法!\n");
else
printf("不合法\n");
printf("是否继续? 1-是,0否 :");
if(scanf("%d",i)!=1 || i!=1)
【java顺序栈测试代码 java顺序排列代码】break;
fflush(stdin);
}
return 0;
}
java的栈:设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,写出a,b,c,e,d,f,g进出栈次序?栈是先进后出java顺序栈测试代码,a在输出的第一个,那么java顺序栈测试代码他肯定是在b进入前出来的,后面的bc也是同样情况
所以前六个是进a,出a,进b , 出b,进c,出c
此时栈为空,后面输出序列为e,d,均在f之前,同理说明ed在f入栈之前出来的
次序是进d,进e,出e,出d
此时栈又空了 , 出栈为f,g,次序和输入一样,就是和a,b的一样
所以是进f,出f,进g,出g
这样了全部过程就是进a,出a,进b,出b,进c,出c,进d,进e,出e,出d,进f,出f,进g,出g
我想实现入栈的顺序为12345,出栈的顺序为54321 , 栈顶元素为5 , 这个程序有点问题,请你帮忙指导一下好吗?改好了,测试一下吧,改的好辛苦 , 呵呵
#includestdlib.h
#includestdio.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef intStatus;
typedef struct StackNode
{
SElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
LinkStack S; //这里S是全局变量,后面的代码就不要再传这个变量了,S会一直指向栈头
//而且,也不要再定义同名的S变量了,大家都犯相同的错误?。?
//局部变量定义与全局变量名相同 , 两个变量会互相影响的,让程序无所适从,编程者也迷糊
//栈的初始化
void InitStack(void)
{
S=NULL; //你这里申请一个局部变量p没用?。?删掉?。?
}
//判栈空
Status StackEmpty(LinkStack S)
{
if(S==NULL)return OK;
else return ERROR;
}
//进栈
void LinkStack_Push(SElemType e)
{
LinkStack p;
p=(LinkStack)malloc(sizeof(LinkStack));
p-data=https://www.04ip.com/post/e;
p-next=S;
S=p;
}
//退栈
void LinkStack_Pop()
{
if( S )
{
LinkStack p;
printf(" %d", S-data ); //加个空格,这样数据有间隔,看起来舒服点
p=S;
S=S-next;
free(p);
}
}
//取栈顶元素
Status GetLinkStackTop(SElemType e) //这里返回取数状态比较好 , 因为e为引用,可以直接带回数据值
{
if(S==NULL) return ERROR;
e = S-data;
return OK ;
}
int main()
{
int i,num;
SElemType n;
InitStack();
//进栈
printf("请输入要进栈元素的个数:");
scanf("%d",num);
printf("进栈顺序为:");
for(i=0;inum;i)
{
scanf("%d",n);
LinkStack_Push(n);
}
GetLinkStackTop(n);
printf("栈顶元素:%d\n",n);
//退栈
printf("出栈结果为\n"); //这里多了个%d,因为你没参数
while(S)
{
LinkStack_Pop();
}
return 0;
}
JAVA中栈的变量怎么实例化- -!
Exception in thread "main" java.lang.NullPointerException这个错误的意思上说找不到MAIN方法 。因为程序的入口是MAIN方法 , 就是说java顺序栈测试代码你要是没有MAIN方法程序就不知道从哪开始运行 。你需要写个MAIN方法调用其java顺序栈测试代码他的方法 。
对于栈的数组实现 , 判断栈是否为空的代码是?你说的这个情况应该是以数组构成顺序栈的情况下的
一个数组以数组底为栈底,而栈顶时钟标志是始终操作栈顶元素的 。也就是说,你要压栈,必须先把栈顶标志加一之后才能写入,你要弹栈需要先读出再把栈顶标志减一 。
那么,栈为空的时候标志肯定不能是0,因为它标志着栈顶元素是数组的第一个值 , 这样代表栈里是有一个元素的 。所以,top是-1的时候它才是空栈,写入的时候要先加一 , 指向数组第一个空间了才能写
这样一想你就应该知道为什么top是-1时候代表栈空了
顺序栈用data[1...n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是什么?。壳笙杲鈤~入栈的操作时先进入值后改变指针;所以值为x的元素进栈的操作时:
{
data[top]=x;
top;
}
java顺序栈测试代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java顺序排列代码、java顺序栈测试代码的信息别忘了在本站进行查找喔 。

    推荐阅读