1. 程式人生 > >資料結構與演算法分析c語言描述(Mark Allen)--佇列ADT連結串列實現

資料結構與演算法分析c語言描述(Mark Allen)--佇列ADT連結串列實現

佇列ADT連結串列實現


  • 使用連結串列儲存
  • 操作集合
    • 入隊

    • 出隊

    • 初始化

    • 返回隊前元素

    • 列印


#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
struct Node
{
    ElementType Data;
    struct Node *Next;
};

//鏈佇列結構
struct QNode
{
    struct Node *rear;
//尾部指標 struct Node *front; //頭部指標 }; typedef struct QNode *Queue; Queue PtrQ; ElementType DeleteQ(Queue PtrQ); void addQ(Queue PtrQ, ElementType x); bool IsEmpty(Queue Q); void PrintQ(Queue PtrQ); ElementType GetHead(Queue Q); void MakeQ(Queue PtrQ); int main(int argc, char const *argv[]) { PtrQ=
(Queue)malloc(sizeof(struct QNode)); int choose; MakeQ(PtrQ); printf("\t\t\t1.print queue.\n"); printf("\t\t\t2.dequeue.\n"); printf("\t\t\t3.enqueue.\n"); printf("\t\t\t4.get front.\n"); while (~scanf("%d", &choose)) { if (choose == 0) { break
; } switch (choose) { case 1: PrintQ(PtrQ); printf("-------------\n"); break; case 2: printf("delete the front num and it is %d\n", DeleteQ(PtrQ)); break; case 3: int x; printf("\t\t\tinput a element.\n"); scanf("%d", &x); addQ(PtrQ, x); break; case 4: printf("front = %d\n", GetHead(PtrQ)); break; } } system("pause"); return 0; } void MakeQ(Queue PtrQ) { PtrQ->front = (Node *)malloc(sizeof(struct Node)); if (!PtrQ->front) { printf("overflow.\n"); return; } PtrQ->Data=0; PtrQ->rear = PtrQ->front; PtrQ->front->Next = nullptr; } void PrintQ(Queue PtrQ) { Node *f = PtrQ->front->Next; int tag = 0; for (; f != nullptr; f = f->Next) { if (tag == 0) { tag = 1; } else { printf("->"); } printf("%d", f->Data); } printf("->null\n"); } ElementType DeleteQ(Queue PtrQ) { struct Node *FrontCell; ElementType FrontElem; if (PtrQ->front == nullptr) { printf("empty queue.\n"); return -10086; } FrontCell = PtrQ->front; //只剩下一個元素 if (PtrQ->front == PtrQ->rear) { PtrQ->front = PtrQ->rear = nullptr; } else { PtrQ->front = PtrQ->front->Next; } FrontElem = FrontCell->Data; free(FrontCell); //釋放被刪除的節點空間 return FrontElem; } bool IsEmpty(Queue Q) { return (Q->front == nullptr); } void addQ(Queue PtrQ, ElementType x) { Node *p = (Node *)malloc(sizeof(struct Node)); if (!p) { printf("overflow.\n"); return; } p->Data = x; p->Next = nullptr; PtrQ->rear->Next = p; PtrQ->rear = p; } ElementType GetHead(Queue Q) { if (Q->rear == Q->front) { printf("overflow.\n"); return -10086; } return Q->front->Next->Data; }