由于线性存储结构有顺序存储和链式存储两种,而队列是一种特殊的线性结构,所以,队列自然也会有链式存储结构,这种存储结构,称之为“链队列”。只不过,这种结构需要两个指针,一个指针指向队列的头部,一个指针指向队列的尾部。虽然队列采用了链式存储这种方式,但是它本质上仍然是队列,因此,只要是队列,就要遵循:只允许在队列的头部进行删除操作,只允许在队里的尾部进行插入操作。那么,先来定义个链队列结构:
typedef int QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode, *QueuePtr;
typedef struct{
QueuePtr front, rear;
}LinkQueue;
有了队列这种结构后,就可以进行队列元素的插入操作了。
Status EnQueue ( LinkQueue *Q, QElemType e ){
QueuePtr s = ( QueuePtr ) malloc ( sizeof ( struct QNode ) );
if ( !s )
exit ( OVERFLOW );
s->data = e;
s->next = NULL;
Q->rear->next = s;
Q->rear = s;
return OK;
}
同样的,元素的删除操作。
Status DeQueue ( LinkQueue *Q, QElemType *e ){
QueuePtr p;
if ( Q->front == Q->rear )
return ERROR;
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if ( Q->rear == p )
Q->rear = Q->front;
free ( p );
return OK;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。