数据结构代码实现(链队列)

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct QNode
{
	 int	date;
	 QNode	*pNext;
}QNode, *pQNode;
typedef struct Queue
{
	 pQNode front;
	 pQNode rear;
}LinkQueue, *pLinkQueue;
bool	init_LinkQueue( pLinkQueue );
bool	en_LinkQueue( pLinkQueue, int );
bool	traverse_LinkQueue( pLinkQueue );
bool	is_empty( pLinkQueue );
bool	de_LinkQueue( pLinkQueue, int * );
bool	DestroyQueue( pLinkQueue );
int main()
{
	 LinkQueue	q;
	 int		val;
	 init_LinkQueue( &q );
	 en_LinkQueue( &q, 3 );
	 en_LinkQueue( &q, 2 );
	 en_LinkQueue( &q, 1 );
	 de_LinkQueue( &q, &val );
	 printf( "delete is %d\n", val );
	 traverse_LinkQueue( &q );

	 return 0;
	 
}


bool init_LinkQueue( pLinkQueue pQ )
{
	pQ->front = pQ->rear = (pQNode) malloc( sizeof(QNode) ); /* head node */
	  if ( NULL == pQ->front )
		    {
			 exit( -1 );
			 return false;
			  
		}
		  else
			    return(true);
}


bool en_LinkQueue( pLinkQueue pQ, int val )
{
	 
	  pQNode	New;
	 		New = (pQNode) malloc( sizeof(QNode) );
	  if ( NULL == New )
		  {
			 		 exit( -1 );
			   return	false;
			 
		}
		  New->date = val;
	  pQ->rear->	pNext	= New;
	  pQ->		rear	= New;
	  return(true);
}


bool is_empty( pLinkQueue pQ )
{
	 if( pQ->front == pQ->rear )
	  return true;
	 else
	  return false;
}


bool traverse_LinkQueue( pLinkQueue pQ )
{
	 if( is_empty( pQ ) )
	  {
		  printf( "LinkQueue is empty \n" );
		  return false;
		 
	}
	 else
		  {
		  pQNode p = pQ->front;
		  while( p != pQ->rear )
		   {
			   printf( "%d  ", p->pNext->date );
			   p = p->pNext;
			  
		}
		 
	}
	 return true;
}


bool de_LinkQueue( pLinkQueue pQ, int * val )
{
	 if( is_empty( pQ ) )
	  {
		  printf( "pLinkQueue is empty" );
		  return false;
		 
	}
	 else
		  {
		  pQNode	p	= pQ->front->pNext;     /* delete postion */
		  		*val	= p->date;
		  pQ->front->pNext = p->pNext;
		  if( pQ->rear == p )
		   pQ->rear = pQ->front;                        /* finally element */
		  free( p );
		  
		  return true;
		 
	}
}


bool DestroyQueue( pLinkQueue pQ )
{
	 while( pQ->front )
	  {
		  pQ->rear = pQ->front->pNext;
		  free( pQ->front );
		  pQ->front = pQ->rear;
		 
	}
	 return true;
}
发布了5 篇原创文章 · 获赞 0 · 访问量 416

猜你喜欢

转载自blog.csdn.net/guidgeek/article/details/78471842