MKDLFDKFL 2021-05-14 09:10 采纳率: 50%
浏览 44
已采纳

c++运行问题,运行到第92行时直接结束程序,第一次可以运行成功但第二次运行就失败了

#include<iostream>
#include<cstring>
//#define StackMax 100
using namespace std;

typedef struct LinkQueue
{
	struct LinkQueue *next;
	string data;
}LinkQueue,*LinkStack;

typedef struct Queue
{
	LinkQueue *front;
	LinkQueue *rear;
}Queue;

void Stack(Queue &Q,LinkStack &S)//初始化栈和队 
{
	
	Q.front=Q.rear=new LinkQueue;
	
	Q.front->next=NULL;
	
	S=NULL;
	
}

void push(Queue &Q,LinkStack &S)//Q入队,S入栈 
{
	string a;
	bool flag1=true;
	LinkQueue *p;
	p=new LinkQueue;
	int b;

	while(flag1)//队的输入 
	{
		cout<<"1:继续输入	2:结束输入"<<endl;
		cin>>b;
		switch(b)
		{
			case 1:
				cout<<"请在系统中挨个输入你要的内容"<<endl;
				cin>>a;
				p=new LinkQueue;
				p->data=a;
				p->next=NULL;
				Q.rear->next=p;
				Q.rear=p;
				break;
			case 2:
				 flag1=false;
		}
	}

	cout<<"请按照原文再输入一遍"<<endl;

	bool flag2=true;
	while(flag2)//栈的输入 
	{
		cout<<"1:继续输入	2:结束输入"<<endl;
		cin>>b;
		switch(b)
		{
			case 1:
				LinkQueue *q;
				q=new LinkQueue;
				cout<<"请输入需要的数据"<<endl;
				cin>>a;
				q->data=a;
				q->next=S;
				S=q;
				break;
			case 2:
				flag2=false;
		}
		
		
	}	
		
}

void pop(Queue Q,LinkStack S)
{
	cout<<"测试"<<endl;
int i=0;
string t[1000];
LinkStack p; 
printf("链式队列中的元素");
 
if(Q.front->next!=NULL) 
{ 
cout<<"测试"<<endl; 
p=Q.front->next; 
do 
{ 
	t[i]=p->data;
	i++;
	p=p->next; 
}while(p!=NULL); 
}
 
else 
	printf("队列为空\n"); 
	printf("\n"); 
//栈遍历
int f=0;
string d[1000];
LinkStack *q=new LinkStack;
if(q!=NULL)
{
	while(q!=NULL)
	{
		d[1000]=p->data;
		f++;
	}
}

while(f!=0)
{
	if(d[f]!=t[i])
		{
			break;
		}
		i--;
		f--;
}
 
 if(f==0)
 {
 	cout<<"是回文数"<<endl;
 }
 
 else
 {
 	cout<<"不是回文数"<<endl;
 }
 
}

int main()
{
	LinkStack S;
	Queue Q;
	
	Stack(Q,S);
	push(Q,S);
	
	pop(Q,S);
	
	
}

运行pop函数时出现错误

  • 写回答

5条回答 默认 最新

  • 正在学C++ 2021-05-14 09:34
    关注
    void pop(Queue Q,LinkStack S)
    {
        cout<<"测试"<<endl;
        int i=0;
        string t[1000];
        LinkStack p;
        printf("链式队列中的元素");
        if(Q.front->next!=NULL)
        {
            cout<<"测试"<<endl;
            p=Q.front->next;
            do
            {
                t[i]=p->data;
                i++;
                p=p->next;
            }while(p!=NULL);
        }
        else
            printf("队列为空\n");
        printf("\n");
    //栈遍历
        int f=0;
        string d[1000];
    //    LinkStack *q=new LinkStack;
        LinkStack q = S;             //////////////////// q = S;
        if(q!=NULL)
        {
            while(q!=NULL)
            {
                d[f]=q->data;        /////////////////////
                f++;
                q = q->next;         /////////////////////
            }
        }
    
        for(int j=0,k=0;j<i&&k<f;j++,k++)       ///////////////输出测试 可删除
            cout<<t[j]<<"/"<<d[k]<<endl;
        while(f!=0)
        {
            if(d[--f]!=t[--i])      ///////////////////////刚开始f和i就要减一下
            {
                break;
            }
    //        i--;
    //        f--;
        }
        if(f==0)
        {
            cout<<"是回文数"<<endl;
        }
        else
        {
            cout<<"不是回文数"<<endl;
        }
    }

    出错的地方我标出来了,改过来了。你运行一下看看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看