棧和隊列

1、棧

棧是一種先進先出的數據結構。棧頂進棧,棧頂出棧。

  • 數據結構
typedef struct Data{
    int value;
    int min; //用來記錄棧的最小值
}*DataType;
typedef struct Stack
{
    DataType link;//動態數組,或者可以直接用靜態數組
    int top;
}Stack;
  • 棧的初始化
void InitStack(Stack *s)
{
    s->top=0;
    s->link=(DataType)malloc(Max*sizeof(struct Data));
}
  • 進棧
void Push(Stack *s, int d)
{
    if(s->top==Max)
    {
        printf("棧已滿,無法進棧\n");
        return;
    }
    DataType element=(DataType)malloc(sizeof(struct Data));
    element->value=d;
    if(s->top==0)
        element->min=d;
    else
    {
        element->min=s->link[(s->top)-1].min;
         if(s->link[(s->top)-1].min>d)
                element->min=d;
    }
    s->link[s->top]=*element;
    s->top++;
}
  • 出棧
void Pop(Stack *s)
{
    if(s->top==0)
    {
        printf("棧為空\n");
         return;
    }
    s->top--;
}
  • 棧的最小值
int MinStack(Stack *s)
{
    return s->link[s->top-1].min;
}

2、隊列

隊列是FIFO(First In Fisrst Out),即先進先出。有隊頭和隊尾兩個指針,分別指向隊列的頭結點和尾結點。隊頭出隊,隊尾入隊。

Paste_Image.png
  • 數據結構
typedef struct QNode{
    TreeNode Node;      //[TreeNode數據結構](http://www.lxweimin.com/p/1343b3e27869)
    struct QNode * next;
}QNode,*QueueNode;
typedef struct LinkQueue{
    QueueNode front;
    QueueNode rear;
}LinkQueue;
  • 隊列初始化
void Init(LinkQueue *q)
{
    q->front=q->rear=(QueueNode)malloc(sizeof(QNode));//隊列的頭結點(空隊列中只有一個頭結點)
    if(!q->front)//申請內存空間失敗
        exit(0);
    q->front->next=NULL;
}
  • 入隊
void EnQueue(LinkQueue *q,TreeNode treenode)
{
    QueueNode qnode;
    qnode=(QueueNode)malloc(sizeof(QNode));
    qnode->Node=treenode;
    /****插入隊列****/
    qnode->next=q->rear->next;
    q->rear->next=qnode;
    /****改隊尾指針****/
    q->rear=qnode;
}
  • 出隊
void DeQueue(LinkQueue *q,TreeNode *node)
{
    QueueNode p;
    p=q->front->next;//頭結點后一個結點
    *node=p->Node;
    q->front->next=p->next;
    if(q->rear==p)       //刪除的是否是最后一個節點
        q->rear=q->front;
    free(p);
}
  • 隊列是否為空
int QueueEmpty(LinkQueue *q)
{
    if(q->rear==q->front)//此時隊列中只剩一個頭結點,則隊列為空
        return 1;
    else
        return 0;
}
Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容