c 언어 두 스 택 이 하나의 대기 열 을 실현 합 니 다.

3043 단어 데이터 구조
아이디어, 현재 두 개의 스 택 s1, s2 가 설치 되 어 있 습 니 다.대기 열 을 완성 하 다.
     입 대 했 을 때 데 이 터 는 스 택 s1 에 들 어 갑 니 다.팀 을 나 갈 때 s2 스 택 이 비어 있 는 지 확인 하고 비어 있 으 면 s1 스 택 을 나 가 고 스 택 데 이 터 를 순서대로 스 택 s2 에 들 어 갑 니 다.s1 을 모두 스 택 에서 나 온 후 s2 스 택 에서 나 오 는 것 은 이때 의 파티 작업 입 니 다.s2 가 비어 있 지 않 으 면 s2 는 바로 창 고 를 나 갑 니 다.s2, s1 이 모두 비어 있 으 면 대기 열 이 비어 서 팀 작업 을 수행 할 수 없습니다.코드 는 다음 과 같 습 니 다.
/**
  *@filename seqstack.c
  *@author   haohaibo
  *@data     2017/4/15
  *@brief	          
 */

#include 
#include 
#include 

#define N 100

typedef int	datatype_t;
typedef struct {
	datatype_t data[N];
	datatype_t top;	
}seqstack_t; 

typedef struct stackqueue_p{
	seqstack_t *front;
	seqstack_t *real;
	int count;
}sq_t;

/**
  *@brief        
 */
seqstack_t *seqstack_creat()
{
	seqstack_t *s;
	s=(seqstack_t *)malloc(sizeof(seqstack_t));
	if(NULL==s)
	{
		printf(__FUNCTION__);
		printf("ERROR in line %d",__LINE__);
		return (seqstack_t *)-1;
	}
	bzero(s,sizeof(seqstack_t));
	s->top=-1;
} 

/**
  *@brief    
 */
void seqstack_clear(seqstack_t *s)
{
	s->top=-1;
}

/**
  *@brief   
 */
datatype_t seqstack_full(seqstack_t *s)
{

	if(s->top>=N-1)
	{
		printf("static full!");
		return (datatype_t)1;
	}
	else
	return (datatype_t)0;
}

/**
  *@brief   
 */
datatype_t seqstack_empty(seqstack_t *s)
{
	if(s->top==-1)
	{
		printf("static empty!");
		return (datatype_t)1;
	}
	else
	return (datatype_t)0;
}

/**
  *@brief   
 */
datatype_t seqstack_insert(seqstack_t *s,datatype_t value)
{
	if(seqstack_full(s))
	return (datatype_t)-1;
	s->top++;
	s->data[s->top]=value;
	return (datatype_t)0;
}

/**
  *@brief   
 */
datatype_t seqstack_out(seqstack_t *s)
{
	datatype_t value=s->data[s->top];
	if(seqstack_empty(s))
	return (datatype_t)-1;
	s->top--;
	return value;
}

/**
  *@brief      
 */
datatype_t seqstack_show(seqstack_t *s)
{
	datatype_t i;
	if(seqstack_empty(s))
	return (datatype_t)-1;
	for(i=0;i<=s->top;i++)
	printf("top %d=%d.
",i,s->data[i]); return (datatype_t)0; } /** *@brief */ sq_t *stackqueue_create() { sq_t *sq=(sq_t *)malloc(sizeof(sq_t)); sq->front=seqstack_creat(); sq->real=seqstack_creat(); if(NULL==sq) { printf(__FUNCTION__); printf("error in line %d.
",__LINE__); return (sq_t*)-1; } //sq->front->top=sq->real->top=-1; return sq; } /** *@brief */ int push(sq_t *sq,int value) { seqstack_insert(sq->real,value); return 0; } /** *@brief */ datatype_t pop(sq_t *sq) { if(seqstack_empty(sq->real)); { while(seqstack_empty(sq->real)) { seqstack_insert(sq->front,seqstack_out(sq->real)); } } return seqstack_out(sq->front); } /** *@brief */ void stackqueue_show(sq_t *sq) { seqstack_show(sq->front); seqstack_show(sq->real); } int main(void) { sq_t *p=stackqueue_create(); push(p,1); push(p,2); push(p,3); pop(p); stackqueue_show(p); }

좋은 웹페이지 즐겨찾기