
正文
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)
break;
fflush(stdin);
}
return 0;
}
相关问答
Q1: 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
Q2: 我想实现入栈的顺序为12345,出栈的顺序为54321,栈顶元素为5,这个程序有点问题,请你帮忙指导一下好吗?
改好了,测试一下吧,改的好辛苦,呵呵
#includestdlib.h
#includestdio.h
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
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=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;
}
Q3: JAVA中栈的变量怎么实例化
- -!
Exception in thread "main" java.lang.NullPointerException这个错误的意思上说找不到MAIN方法。因为程序的入口是MAIN方法,就是说java顺序栈测试代码你要是没有MAIN方法程序就不知道从哪开始运行。你需要写个MAIN方法调用其java顺序栈测试代码他的方法。
Q4: 对于栈的数组实现,判断栈是否为空的代码是?
你说的这个情况应该是以数组构成顺序栈的情况下的
一个数组以数组底为栈底,而栈顶时钟标志是始终操作栈顶元素的。也就是说,你要压栈,必须先把栈顶标志加一之后才能写入,你要弹栈需要先读出再把栈顶标志减一。
那么,栈为空的时候标志肯定不能是0,因为它标志着栈顶元素是数组的第一个值,这样代表栈里是有一个元素的。所以,top是-1的时候它才是空栈,写入的时候要先加一,指向数组第一个空间了才能写
这样一想你就应该知道为什么top是-1时候代表栈空了
Q5: 顺序栈用data[1...n]存储数据,栈顶指针是top,则值为x的元素入栈的操作是什么啊?求详解~~
入栈的操作时先进入值后改变指针;所以值为x的元素进栈的操作时:
{
data[top]=x;
top++;
}
java顺序栈测试代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java顺序排列代码、java顺序栈测试代码的信息别忘了在本站进行查找喔。








