王道C语言督学营 数据结构中级day6

 新建一个栈,读取标准输入3个整数3 4 5,入栈3 4 5,依次出栈,打印 5 4 3,新建循环队列(Maxsize为5),读取标准输入3 4 5 6 7,入队7时,队满,打印false,然后依次出队,输出 3 4 5 6

代码如下:

#include 
#include
#define Maxsize 100
typedef int Elemtype;
typedef struct 
{
	Elemtype data[5];
	int top;
}SqStack;

void Initstack(SqStack &s)
{
	s.top=-1;
}

bool Emptystack(SqStack s)
{
	if(s.top==-1)
	{
		return true;
	}
	else
	{
	return false;
}
}

bool push(SqStack &s,Elemtype x)
{
		if(s.top==Maxsize-1)
	{
		return false;
	}
	s.data[++s.top]=x;
	return true;
}

bool pop(SqStack &s,Elemtype &x)
{
			if(s.top==-1)
	{
		return false;
	}
	x=s.data[s.top--];
	return true;

}

typedef struct 
{
	Elemtype data[5];
	int rear,front;
}SqQueue;

void InitQueue(	SqQueue &Q)
{
	Q.rear=Q.front=0;
}

bool EmptyQueue(SqQueue Q)
{
	if(Q.rear==Q.front)
	{
		return true;
	}
	else
	{
	return false;
}
}

bool EnQueue(SqQueue &Q,Elemtype m )
{
		if((Q.rear+1)%Maxsize==Q.front)//队满报错 
	{
		return false;
	}
	Q.data[Q.rear]=m;
     Q.rear=(Q.rear+1)%Maxsize;//将指针指向下一位置 
	return true;
	
}

bool  DeQueue(SqQueue&Q,Elemtype &m)
{
		if(Q.rear==Q.front) 
	{
		return false;
	}
	  m=Q.data[Q.front];//相当于指针,此时得到了该点的地址,指向该点,故Q.data输出此时该点的值 
      Q.front=(Q.front+1)%Maxsize;//将指针指向下一位置 
	return true;
}

int main()
{
    SqStack s;
	Elemtype x;
    Initstack(s);
	Emptystack(s);
	printf("请输入要进栈的值\n"); 
	for(int i=0;i<3;i++)
	{
		scanf("%2d",&x);
		push(s,x);
		if(x==false) 
	    {
		printf("false\n");
	    }
	}
	//push(s,x);
	//pop(s,x);
	printf("栈的输出值为\n"); 
		for(int j=0;j<3;j++)
	{
	    pop(s,x);
	    printf("%2d",x);
	   
    }

   SqQueue Q;
   Elemtype m;
   InitQueue (Q);
   EmptyQueue(Q);
   	printf ("\n请输入要进队列的值\n"); 
	for(int a=0;a<5;a++)
	{
		scanf("%d",&m);
        EnQueue(Q,m);
        
	}
	
		printf("队列的输出值为\n"); 
		for(int B=0;B<5;B++)
	{
	      DeQueue(Q,m);
	    printf("%2d",m);
	  
    }
}

以上为最终输出结果

王道C语言督学营 数据结构中级day6_第1张图片

你可能感兴趣的:(考研王道数据结构,c语言,数据结构,c++)