数据结构与算法(C语言版)

小-鸟 2016-10-13 09:39:41
今天上队列,我们用的是英语教材,上面说rear指的是最后一个元素,但是我课后听小甲鱼的视频,他说的rear指向的是最后一个元素的下一个元素。 我就懵了,所以还得请专业的人士帮帮我,到底是什么原因。
...全文
494 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2016-10-22
  • 打赏
  • 举报
回复
队尾的位置,不同的书,有的是指向实际的最后一个,有的是指向下一个空的,实现上都可以的。
paschen 2016-10-13
  • 打赏
  • 举报
回复
两种都是可以的,都可以实现
赵4老师 2016-10-13
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,掰手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
SureGOGOGO 2016-10-13
  • 打赏
  • 举报
回复
你这算什么,你都没有完整的去了解整个流程,为什么rear指向最后一个元素的下一个元素,因为rear是队尾,队列只能一边增加,另外一边删除的数据结构,常用增加的一头作为队尾,删除的一头作为队头,就像食堂排队,先排队的先拿饭走人??不知道你这样,懂了没??
#include "stdafx.h"
#include "stdlib.h"


typedef struct QNode
{
	int Data;
	struct QNode *pNext;
}QNode,*pQNode;

typedef struct Queque
{
	QNode* font;
	QNode *rear;
}Que;

Que *InitQueque();
bool EnQue(Que *q,int data);
bool QuePrint(Que *q);
void ReleaseQue(Que*q);

void main(int argc, char* argv[])
{
	Que *q=InitQueque();
	for(int i=0;i<10;i++) 	EnQue(q,i);
	QuePrint(q);
	ReleaseQue(q);

}

Que *InitQueque()
{
	Que *q=(Que*)malloc(sizeof(Que));
	if(!q) return NULL;
	
	QNode *pd=(QNode*)malloc(sizeof(QNode));
	if(!pd) return NULL;
	q->rear=q->font=pd;
        q->font->pNext=NULL;
	return q;
}

bool EnQue(Que *q,int data)
{
	
	if(!q) return false;
	
	QNode *node=(QNode *)malloc(sizeof(QNode));
	if(!node) return false;
	
	node->Data=data;
	node->pNext=NULL;
	q->rear->pNext=node;
	q->rear=node;
	return true;
}

bool QuePrint(Que *q)
{
	QNode*p=q->font->pNext;
	if(!p) return false;
	while(p)
	{
         printf("%d\n",p->Data);
	 p=p->pNext;
	}
	return true;
}

void ReleaseQue(Que*q)
{
	
	QNode*p=q->font->pNext;
	QNode *p1=NULL;
	if(p==NULL) return;
	while(p)
	{
	 p1=p->pNext;
	 free(p);
	 p=p1;
	}
	q->font=q->rear=NULL;
}
看这里
bool EnQue(Que *q,int data)
{
     
    if(!q) return false;
     
    QNode *node=(QNode *)malloc(sizeof(QNode));
    if(!node) return false;
     
    node->Data=data;
    node->pNext=NULL;
    q->rear->pNext=node;
    q->rear=node;
    return true;
}
知道了没??为什么rear是指向最后一个元素的下一个元素
dustpg 2016-10-13
  • 打赏
  • 举报
回复
原来是队列, 我看错了
dustpg 2016-10-13
  • 打赏
  • 举报
回复
这个随意, 可以有独立的头元素与尾元素. 好处就是代码逻辑简单, 坏处就是多用了一点内存, 一般单链表不用, 而双链表用

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧