九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C語言實現(xiàn),順序隊列,循環(huán)隊列,和棧!

隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。隊列的數(shù)據(jù)元素又稱為隊列元素。在隊列中插入一個隊列元素稱為入隊,從隊列中刪除一個隊列元素稱為出隊。因為隊列只允許在一端插入,在另一端刪除,所以只有最早進入隊列的元素才能最先從隊列中刪除,故隊列又稱為先進先出(FIFO—first in first out)線性表。

順序隊列代碼實現(xiàn):

#include <stdio.h>#define MAX 10typedef struct Queue{    int date[MAX];    int front;    int tial;}queue;queue a;void IniQueue() //初始化{    a.tial = 0;    a.front = 0;}int isEmpty(){    if(a.front == 0)     //隊列為空    {        return 1;    }    else    {        return 0;    }}int push_Queue(int data)    //入隊{    if(a.front == MAX-1)  //隊列已滿    {        return 1;    }    else    {        a.date[a.front] = data;    }    a.front++;    return 0;}int pop_Queue()     //出隊{    if(!isEmpty())  //不為空    {        a.date[a.front--];       // printf("%d\n",a.front);    }    return 0;}void show()     //遍歷{    int i = 0;    for(i = 0; i < a.front;i++ )    {        printf("%d\n",a.date[i]);    }}int main(void){    printf("Hello World!\n");    push_Queue(1);    push_Queue(2);    push_Queue(3);    push_Queue(4);    push_Queue(5);    push_Queue(6);    push_Queue(7);    show();    puts("==================");    pop_Queue();    show();    return 0;}


循環(huán)隊列

在實際使用隊列時,為了使隊列空間能重復(fù)使用,往往對隊列的使用方法稍加改進:無論插入或刪除,一旦rear指針增1或front指針增1 時超出了所分配的隊列空間,就讓它指向這片連續(xù)空間的起始位置。自己真從MaxSize-1增1變到0,可用取余運算rear%MaxSize和front%MaxSize來實現(xiàn)。這實際上是把隊列空間想象成一個環(huán)形空間,環(huán)形空間中的存儲單元循環(huán)使用,用這種方法管理的隊列也就稱為循環(huán)隊列。除了一些簡單應(yīng)用之外,真正實用的隊列是循環(huán)隊列。 
在循環(huán)隊列中,當(dāng)隊列為空時,有front=rear,而當(dāng)所有隊列空間全占滿時,也有front=rear。為了區(qū)別這兩種情況,規(guī)定循環(huán)隊列最多只能有MaxSize-1個隊列元素,當(dāng)循環(huán)隊列中只剩下一個空存儲單元時,隊列就已經(jīng)滿了。因此,隊列判空的條件時front=rear,而隊列判滿的條件時front=(rear+1)%MaxSize。
#include <stdio.h>#define MAX 1000typedef struct Queues{    int date[MAX];    int front;//頭    int tail;//尾}Queue;Queue queue;void CreatQueue(){    queue.front = 0;    queue.tail = 0;}void push_back(int vaule)   //入隊{    if((queue.tail +1)%MAX != queue.front)//隊列未滿    {        queue.tail = (queue.tail+1)%MAX;//因為少用一個,加1,才到尾;//%MAX是為了提高準確度        queue.date[queue.tail] = vaule;    }    else    {        printf("full\n");    }}int pop_Queue()     //出隊{    if(queue.front != queue.tail)//隊列不為空    {        int vaule = queue.date[queue.front+1];//先進先出        queue.front = (queue.front+1)%MAX;        return vaule;    }    return 0;}int main(){    CreatQueue();    int i = 0;    for(i = 1;i <= 5;i++)    {        push_back(i);        printf("%d\n",queue.date[i]);    }    printf("==============\n");    for(i = 1;i <= 5;i++)    {        printf("%d\n",pop_Queue());    }    return 0;}

作為一種數(shù)據(jù)結(jié)構(gòu),是一種只能在一端進行插入和刪除操作的特殊線性表。它按照先進后出的原則存儲數(shù)據(jù),先進入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數(shù)為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。
#include <stdio.h>#include <stdlib.h>typedef struct node     //節(jié)點{    int member;    struct node* next;}Node,*pNode;typedef struct stack{    pNode Top;          //棧頂    pNode Buttom;       //棧底}Stack,*pStack;void InitStack(pStack ps)       //初始化棧{    ps->Top = (pNode)malloc(sizeof(Node));    if(NULL == ps)    {        printf("malloc error\n");        exit(-1);    }    else    {        ps->Buttom = ps->Top;        ps->Top->next = NULL;    }}int push_stack(pStack ps,int data)      //壓棧{    pNode New = (pNode)malloc(sizeof(Node));    if(NULL == New)    {        printf("push_stack error\n");        return 0;    }    else    {        New->member = data;        New->next = ps->Top;        ps->Top = New;        return 1;    }}void ShowStack(pStack ps)       //遍歷棧{    pNode New = ps->Top;    while(New != ps->Buttom)    {        printf("%d\n",New->member);        New = New->next;    }}int Empty(pStack ps)        //判斷棧是否為空{(diào)    if(ps->Top == ps->Buttom)    {        printf("stack is NULL\n");        return 1;    }    else    {        printf("stack no NULL\n");        return 0;    }}int pop_stack(pStack ps)    //出棧{    pNode swap = NULL;    int vaule = 0;    if(1 == Empty(ps))    {        exit(-1);    }    else    {        vaule = ps->Top->member;        swap = ps->Top;        ps->Top = ps->Top->next;        free(swap);        swap = NULL;        return vaule;    }}void clear(pStack ps)       //清空棧{    pNode cnode = NULL;    while(ps->Top != ps->Buttom)    //棧不為空    {        cnode = ps->Top;        ps->Top = ps->Top->next;        free(cnode);        cnode = NULL;    }}int main(){    Stack s;    int i = 0;    int num = 0;    int data = 0;    int re_num = 0;    InitStack(&s);    printf("Do you want how num?\n");    scanf("%d",&num);    for(i = 0; i < num;i++)    {        printf("at %d num:",i+1);        scanf("%d",&data);        if(push_stack(&s,data))        {            continue;        }        else        {            printf("push_stack error\n");            exit(-1);        }    }    ShowStack(&s);    return 0;}
編譯環(huán)境:Qt5.3.2
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
數(shù)據(jù)結(jié)構(gòu)——循環(huán)隊列PTA習(xí)題
STL系列之三 queue 單向隊列 (轉(zhuǎn))
數(shù)據(jù)結(jié)構(gòu)之判斷一棵樹是不是完全二叉樹
C++實現(xiàn)隊列
SPFA算法
?LeetCode刷題實戰(zhàn)225:用隊列實現(xiàn)棧
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服