注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

4-3-7队列的链式储存 貌似队列的最后又问题 看了好久没找到  

2014-04-14 23:46:09|  分类: 陈明数据结构代码 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}linklist;
typedef struct//怎么弄了两个来啊!
{
linklist *front,*rear;
}linkqueue;
linkqueue *q;
//连队很好的解决了对个队列同时使用的问题,每个连队都有自己的头,尾指针,各个连队都有自己的相对独立的链表;
//连队为空时,都指向头结点,rear=front;



//(1) 初始化链表;
void Initqueue(linkqueue *q)
{
q=(linkqueue *)malloc(sizeof(linklist));
q->front->next=NULL;//看到我有带你蒙了啊!
q->rear=q->front;
}



//(2)判断是否为空的表;

int QueueEmpty(linkqueue *q)
{
if(q->front==q->rear)
return true;
return false;
}


//(3)取头结点;
int Gethead(linkqueue *q)
{
if(QueueEmpty(q))
{
printf("queue is enmpty");
return NULL;
}
else
{
return q->front->next->data;//下一个结点的指针域的数据域;
}
}



//(4) 入队操作;

void Inqueue(linkqueue *q,int x)
{
linkqueue *p;
p=(linkqueue *)malloc(sizeof(linklist));//一个新的结点;
p->rear->data=x;//加入数据的值;
//*************************************************
q->rear=p->rear->next;//************把p加入到q的下一个结点上;
q->rear=p->rear;//修改我们的尾结点;
q->rear->next=NULL;//现在的尾结点置为零;
}



//(5)出队;
int DeQueue(linkqueue *q)
{
linklist *p;//中介的点;
int e;
if(QueueEmpty(q))
{
printf("queue is enmpty");
return NULL;
}
p=q->front->next;
e=p->data;
//***************************会忽悠的啊*********************************************************
if(p==q->rear) q->front=q->rear;//如果只有一个结点,出队后队列为空;


else
{
q->front->next=p->next;//这个我就不说了;
free(p);
}
return e;
}




//*******************************************************************************************************
//循环的连队;
//可以省去我们的头结点,用rear可以找到我们的头指针的;会变得比较的容易的;
//删除元素相当于我们的rear后面的下一个结点,添加也是如此的



//(1)插入的操作;
void Inse_cpue(linkqueue *r,int x)
{
linklist *t;
t=(linklist *)malloc(sizeof(linklist));
t->data=x;
if(r==NULL)
{
t->next=r->rear->next;//有问题啊!
r->rear=t;


}
else
{
t->next=r->rear->next;
r->rear->next=t;
r->rear=t;
}

}

//(2)删除的元素,删除头结点;


int Del_cque(linkqueue *r)
{//删除元素相当于我们的rear后面的下一个结点
linklist *front;
int e;
if(r==NULL)
printf("empty");
else
{
front=r->rear->next;//将指向头结点的针织,给front;
if(r->rear==front)
{
r=NULL;
return NULL;
}
else
{
r->rear->next=front->next;
e=front->data;
free(front);
return e;
}
}
}



  评论这张
 
阅读(3)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017