数据结构习题学习笔记(The Fifth Day)

 Q1:  用单链表实现队列 ,并令 front=rear=NULL 表示队列为空,编写实现队列的如下五种运算的函数:
makenull: 将队列置成空队列;
front: 返回队列的第一个元素;
enqueue: 把元素 x 插入到队列的后端;
dequeue: 删除队列的第一个元素;
empty: 判定队列是否为空。
MyView:道理简单,实现起来不容易.
注:使用LCC的IDE,好用并且方便.
CODE:
1,queue.h (队列头文件)
#include  < stdio.h >
#include 
< stdlib.h >

typedef 
struct  QNode {
    
int data;
    
struct QNode *next;
}
QNode,  * QueuePtr;

typedef 
struct {
    QueuePtr front;
//对头指针
    QueuePtr rear;//队尾指针
}
LinkQueue; // 队列定义符号

/*构造队列*/
LinkQueue
*  makeQueue() {
    LinkQueue 
*= (LinkQueue *) malloc(sizeof(LinkQueue));
    
if(!Q)printf("Q:OVERFLOW ");//存储分配失败
    else{
    Q
->rear=NULL;
    Q
->front= NULL;
    }

    
return Q;
}


// 构造节点
QueuePtr makeNode( int  i) {
    QueuePtr N 
= (QueuePtr)malloc(sizeof(QNode));
    
if(!N)printf("Node:OVERFLOW ");//存储分配失败
    else{
    N
->data=i;
    N
->next=NULL;
    }

    
return N;
}


// 判断队列是否为空
int  isEmpty(LinkQueue  * Q) {

    
if(Q->front == NULL)
        
return 1;
    
else
        
return 0;
}


// 将队列置空
void  makeNull(LinkQueue  * Q) {
    
if(!isEmpty(Q))
       printf(
"错误:队列为空!");
    
else{
       Q
->rear=NULL;
       Q
->front= NULL;
    }

}


// 删除队列第一个元素
void  deQueue(LinkQueue  * Q) {
    
if(isEmpty(Q))
       printf(
"错误:队列为空! ");
    
else{
       QueuePtr p;
       p 
= Q->front;
       Q
->front = p->next;
       free(p);
    }

}


/*返回队列的第一个元素*/
int  front(LinkQueue  * Q)
{
    
int x;
    
if(!isEmpty(Q) && Q->front!=NULL)
        x
=(Q->front->data);
    
return x;
}


/*把元素x插入到队列右端*/
void  enqueue(LinkQueue  * Q, int  e)
{
    QueuePtr p 
= makeNode(e);

         
if ( !isEmpty(Q))    //队列不为空,直接链接到队列尾部
          {
            Q
->rear->next = p;
            Q
->rear = p;
          }

          
else
          
{    //队列为空
             Q->front = p;
             Q
->rear = p;
          }


}


/*打印链表*/
void  print(LinkQueue  * Q) {
    
if(!isEmpty(Q)){//判断队列是否为空
          QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
          
if(!p)printf("Node:OVERFLOW ");//存储分配失败
          else{
               printf(
"队列为:");
               p
=Q->front;
               
do
               
{
                  printf(
"%d",p->data);
                  
if((p->next)!=NULL){
                     p
=p->next;
                  }

                  
else break;
                  printf(
",");
               }
while(1);
               printf(
" ");
          }

     }

     
else
         printf(
"错误:检测到队列为空,无法打印! ");
}

2,测试代码
#include  < stdio.h >
#include 
" queue.h "



void  main()
{

    LinkQueue 
*Queue = makeQueue();

    print(Queue);
    enqueue(Queue,
3);
    enqueue(Queue,
4);
    enqueue(Queue,
5);
    enqueue(Queue,
6);


    print(Queue);
    deQueue(Queue);
    print(Queue);

}

 

RUN:

Good Luck……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值