c语言队列操作

Python011

c语言队列操作,第1张

pq->rear->next

=

pnew这个代码从队列的尾部增加新节点,

然后pq->rear

=

pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。

队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除

按先进先出特点的一种实现。

但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号。

//定义队列结构体

typedef struct Qnode

{

int data

struct Qnode *next

} Queue , *QueuePtr

typedef struct

{

QueuePtr front

QueuePtr rear

} linkQnode

//创建一个队列

initQueue (linkQnode *q)

{

q ->front = q ->rear = (QueuePtr) malloc (sizeof (Queue))

if (!q ->front) exit (0)

q ->front ->next = NULL

}

//入队列

EnterQueue (linkQnode *q , int item)

{

QueuePtr p

p = (QueuePtr) malloc (sizeof (Queue))

if (!p) exit (0)

p ->data = item

p ->next = NULL

q ->rear ->next = p

q ->rear = p

}

//出队列

DelQueue (linkQnode *q , int *item)

{

QueuePtr p

if (q ->front = q ->rear) return

p = q ->front ->next

*item = p ->data

q ->front ->next = p ->next

if (q ->rear == p)

q ->rear = q ->front

free (p)

}

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

以上是从数据结构角度来看,从操作系统角度来看,所有的数据结构都是对虚拟内存的操作,堆是堆,栈是栈,栈指的是C语言函数所使用的自动有函数回收的虚拟内存空间,而堆则有操作系统堆管理器来管理的那部分虚拟内存,从C语言角度来看,使用malloc函数动态分配的内存,就是堆内存。