队列的链式存储结构也可以用单链表实现。插入和删除操作分别在链表的两头进行,队列指针front应该指链表头,不能在尾,因为是单链表。
队列结构具体定义:
1 2 3 4 5 6 7 8 9 10 11 |
typedef struct Node *PtrToNode; struct Node { /* 队列中的结点 */ ElementType Data; PtrToNode Next; }; typedef PtrToNode Position; struct QNode { Position Front, Rear; /* 队列的头、尾指针 */ }; typedef struct QNode *Queue; |
- 入队操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void AddQ(Queue Q,ElementType X) { Position pTemNode = (Position)malloc(sizeof(Node)); pTemNode->Data = X; pTemNode->Next = NULL; if (IsEmpty(Q)){ Q->Front = pTemNode; Q->Rear = pTemNode; }else{ Q->Rear->Next = pTemNode; Q->Rear = pTemNode; } } |
- 判断队列空
1 2 3 4 |
bool IsEmpty(Queue Q) { return (Q->Front == NULL); } |
- 出队操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ElementType DeleteQ(Queue Q) { Position FrontCell; ElementType FrontElem; if(IsEmpty(Q)){ printf("队列空"); return ERROR; }else{ FrontCell = Q->Front; if (Q->Front == Q->Rear) Q->Front = Q->Rear = NULL; else Q->Front = FrontCell->Next; FrontElem = FrontCell->Data; free(FrontCell); return FrontElem; } } |
《链式存储单链如何实现队列》上有1条评论
评论已关闭。