C语言中链表与队列有很么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中链表与队列有很么区别?相关的知识,希望对你有一定的参考价值。
上节课老师讲了链表,听明白了。这节课又讲了队列,这就不懂了。一开始以为队列就是链表的一种嘛,不过人为规定只能尾进头出而已嘛,但是看了课件就懵了。
(以下为课件内容)
typedef struct
elemtype *elem; /*指向存放队列数据元素的数组*/
int front,rear; /*分别是队首和队尾下标,也称为队首指针和队尾指针*/
int size; /*数组elem的容量*/
SQQUEUE;
问1、队列中不能使用结构体吗?为什么会报错?我要在每个节点储存位置信息int x,y 这个怎么办?
问2、front 和 rear 为什么不知指针而只是int?
问3、为什么没有定义指向下一个节点的指针?
反正就是对这一段定义一点都看不懂……初学者不要鄙视我
链表是一种数据结构,而队列是一种抽象的概念,就像栈一样。
船是一个比较抽象的概念,具体实现有木船、铁船等等。队列好比是船,链表好比是造船的材料。
队列可以用链表实现,也可以用动态数组实现,这个抽象的概念可以用各种具体的数据结构实现。
SQQUEUE的第一个元素elemtype *elem;其实是指向了一个数组,该数组中存储着类型为elemtype的元素,然后front和rear就标识了队首和队尾元素对应的数组下标。
typedef struct _Point
int x,y;
Point;
#define elemtype Point//这个elemtype可以是任意你自己定义的结构,可以是结构体,也可以是简单数据类型
elemtype array[10]=0;//这个是队列的数据结构,在这里是一个Point数组
SQQUEUE queue=0;
queue.elem=array;//这样array中的元素就是queue中的元素了。
queue.front=queue.rear=queue.size=0;
你说的next指针是链表节点中的成员。你想想链表和链表节点间的区别。
typedef struct _ListNode//这是链表节点
int x,y;//这是存储的数据
struct _ListNode *next;
ListNode;
typedef struct _List//这是链表,这里并不存储next
ListNode* front,rear;
List;
如果还不懂,可以追问我。追问
你好,我还想问是不是我要分别定义一个队列的结构体和一个节点的结构体呢?老师要求我们使用队列来实现贪吃蛇,能帮我看看我这样子定义可以么?
struct Snake_Cell
int x;
int y;
struct Snake_Cell *next;
;
typedef struct
struct Sbake_Cell *head, *rear;
int size;
LKQueue; 如果没有问题,那在下面的主函数里边我怎么调用队列的头指针和尾指针呢?
对头!
节点结构体用来存储数据,成员包括数据和next指针。
队列结构体用来管理这些节点,成员包括首尾指针、队列长度等。
typedef struct _Snack_Cell
int x, y;//或者POINT pt;
struct _Snack_Cell *next;
Snack_Cell;//经过typedef之后你就可以直接用Snack_Cell替代struct _Snack_Cell了,免去写struct的麻烦了。
typedef struct _LKQueue
Snake_Cell *head, *rear;
int size;
LKQueue;
LKQueue* createLKQueue()
LKQueue* thiz=(LKQueue*)malloc(sizeof(LKQueue));
thiz->head=thiz->rear=NULL;
size=0;
return thiz;
void appendSnackCell(LKQueue* thiz, Snack_Cell* node)
if(head)
thiz->rear->next = node;//非空的情况
else
thiz->head=node;//空的情况
thiz->rear=node;
size++;
大概意思就是这样,具体的参照书里的吧,我在这里不可能一一列举,这些东西书上都有。
链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;
队列是一种数据结构,其特点是先进先出,后进后出;
队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。 参考技术B 1、可以使用结构体,elemtype 可以使内置类型,也可以是你自己定义的类型。例如:
typedef struct
int x;
int y;
Position;
typedef struct
Position* array;
int q,p;
int size;
Queue;
2、你可以理解front和rear只是下标,这个队列使用数组实现的。
3、这个结构体定义的是一个队列,elem这个指针就是指向真正存放元素的数组的。
以上是关于C语言中链表与队列有很么区别?的主要内容,如果未能解决你的问题,请参考以下文章