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

#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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值