【我的漫漫考研路】數(shù)據(jù)結(jié)構(gòu)·隊(duì)列的鏈表實(shí)現(xiàn)

正文之前

今天看無窮級(jí)數(shù)這個(gè)數(shù)學(xué)內(nèi)容實(shí)在看得頭疼,索性看到八點(diǎn)多就不看了。愉快的寫起了碼蕴侣,對(duì)我來說這個(gè)可有趣了缠犀!雖然有時(shí)候莫名其妙的就會(huì)Run success数苫,有時(shí)候也是不知為啥Bug連連,不過好在都能克服辨液,我還是很開心的虐急!寫出了鏈表形式的隊(duì)列,我去滔迈,我總感覺我的隊(duì)列是亂七八糟的那種止吁,完全按照我自己的想法在寫,沒有看書上的燎悍,后面復(fù)習(xí)還要規(guī)范一下敬惦,現(xiàn)在的話,還是先寫了再說间涵!書上只要幾十行仁热,我的花了整整140,可悲可嘆勾哩,路漫漫其修遠(yuǎn)兮~~

正文

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE  4
//注:定義隊(duì)列結(jié)構(gòu)體及其指針
typedef struct Queue
{
    char Data;
    struct Queue *next;
    
} Queue, *PtrQ;
//注:定義隊(duì)首隊(duì)尾的指針以及隊(duì)列的大小指數(shù)
typedef struct {
    PtrQ front;
    PtrQ rear;
    int size;
} *Pointer;

//注:初始化隊(duì)列函數(shù)抗蠢,申請(qǐng)內(nèi)存建立一個(gè)空表頭,成為入口和鏈表的接口
//注:此處一次性的把六個(gè)存儲(chǔ)空間全部整合擺好思劳,然后形成了后面的圖解中的內(nèi)存分布形式迅矛,一個(gè)表頭,五個(gè)隊(duì)列內(nèi)存塊
PtrQ InitQueue()
{
    Queue *ptrQ;
    ptrQ=(Queue *)malloc(sizeof(Queue));
    int len=MAXSIZE;
    PtrQ head=ptrQ;
    while(len--)
    {
        //注:采用的是尾插法的鏈表生成模式
        PtrQ p=(Queue *)malloc(sizeof(Queue));
        p->next=head->next;
        head->next=p;
        head=p;
    }
    head->next=ptrQ->next;
    //注:將初始化后的鏈表隊(duì)列傳回
    return ptrQ;
}


//注:插入數(shù)值函數(shù),先預(yù)判需要插入內(nèi)存是否已經(jīng)滿了
void Putin(PtrQ ptrQ,Pointer queue,char item)
{
    if (queue->size==MAXSIZE)
    {
        printf("\n隊(duì)列已經(jīng)滿了G迸选秽褒!~~\n");
    }
    else
    {
        //注:如果隊(duì)列未滿壶硅,分為兩種情況,第一次入值和后面的入值
        if (queue->rear==queue->front&&queue->size==0)
        {
            PtrQ L=ptrQ->next;
            //注:此時(shí)如果是第一次插入數(shù)值销斟,那么頭指針也要跟著跑一下庐椒!
            printf("\n隊(duì)列空間剛剛空空如也!~終于等到你蚂踊!~\n");
            queue->front=L;
            queue->rear=L;
        }
        else
        {
            //注:后面的入值就不需要考慮那么多约谈,因?yàn)槭茄h(huán)的鏈表,所以不存在先后關(guān)系犁钟,只要向前走已經(jīng)可以從頭到尾棱诱,
            PtrQ L=queue->rear;
            queue->rear=L->next;
        }
        queue->rear->Data=item;
        queue->size++;
        printf("\n成功插入!數(shù)值是:|\t%c\t|,當(dāng)前隊(duì)列內(nèi)有%d個(gè)數(shù)@远迈勋!\n",item,queue->size);
    }

}

//注:拋出數(shù)值函數(shù),先預(yù)判是否還有數(shù)值可以拋出,拋出后頭指針向前走1位
char Putout(PtrQ ptrQ,Pointer queue)
{
    if (queue->size==0)
    {
        printf("\n我大清醋粟!亡了C夜健!昔穴!\n" );
    }
    else
    {
        //注:拋出函數(shù)的內(nèi)容很簡(jiǎn)單镰官,頭指針向后走一位,size-- 然后拋出數(shù)值即可
        char out;
        PtrQ L=queue->front;
        out=L->Data;
        queue->front=L->next;
        queue->size--;
        printf("\n拋出后當(dāng)前只有%d個(gè)數(shù)\t",queue->size);
        printf("被拋出來的是:| \t%c\t|\n ",out);
        return 0;
    }
    return 0;
}


//注:遍歷函數(shù)吗货,簡(jiǎn)單易懂泳唠,因?yàn)槭茄h(huán)體,所以不存在夏先先后宙搬,從頭到尾跑一遍笨腥,一定是整個(gè)隊(duì)列的輸出,只要用size控制輸出長(zhǎng)度即可
void ShowQueue(PtrQ ptrq,Pointer queue)
{
    
    PtrQ L=queue->front;
    int X=queue->size;
    while(X--)
    {
        char out;
        out=L->Data;
        L=L->next;
        printf("\n現(xiàn)在整個(gè)隊(duì)列中的情況是:|\t%c  \t |\n",out);
    }
    printf("\n******遍歷完成勇垛!******\n\n");
}



int main()
{
    //注:初始化整個(gè)鏈表
    Pointer queue;
    PtrQ ptrQ;
    ptrQ=InitQueue();
    queue->front=ptrQ;
    queue->rear=ptrQ;
    queue->size=0;
    //注:為了測(cè)試所有函數(shù)的性能脖母,先壓入四個(gè)值,然后全部拋出闲孤,再請(qǐng)求拋出谆级,會(huì)回復(fù):大清亡了!
    Putin(ptrQ, queue, 'a');
    Putin(ptrQ, queue, 'c');
    Putin(ptrQ, queue, 'd');
    Putin(ptrQ, queue, 'Z');
    Putout(ptrQ, queue);
    Putout(ptrQ, queue);
    Putout(ptrQ, queue);
    Putout(ptrQ, queue);
    Putout(ptrQ, queue);
    //注:然后再次壓入數(shù)值讼积,在拋出
    Putin(ptrQ, queue, 'G');
    Putin(ptrQ, queue, 'H');
    Putout(ptrQ, queue);
    Putout(ptrQ, queue);
    Putin(ptrQ, queue, 'D');
    //注:最后遍歷
    ShowQueue(ptrQ,queue);
    return 0;
}

阿西吧肥照,我對(duì)面的小妹妹還沒醒過來,九點(diǎn)鐘跟我說睡半個(gè)小時(shí)~然而

運(yùn)行結(jié)果:


隊(duì)列空間剛剛空空如也勤众!~終于等到你舆绎!~

成功插入!數(shù)值是:|  a   |,當(dāng)前隊(duì)列內(nèi)有1個(gè)數(shù)C茄铡吕朵!

成功插入猎醇!數(shù)值是:|  c   |,當(dāng)前隊(duì)列內(nèi)有2個(gè)數(shù)!努溃!

成功插入硫嘶!數(shù)值是:|  d   |,當(dāng)前隊(duì)列內(nèi)有3個(gè)數(shù)!梧税!

成功插入音半!數(shù)值是:|  Z   |,當(dāng)前隊(duì)列內(nèi)有4個(gè)數(shù)!贡蓖!

拋出后當(dāng)前只有3個(gè)數(shù)  被拋出來的是:|    a   |
 
拋出后當(dāng)前只有2個(gè)數(shù)  被拋出來的是:|    c   |
 
拋出后當(dāng)前只有1個(gè)數(shù)  被拋出來的是:|    d   |
 
拋出后當(dāng)前只有0個(gè)數(shù)  被拋出來的是:|    Z   |
 
我大清!亡了;筒纭3馄獭!

成功插入坛善!數(shù)值是:|  G   |,當(dāng)前隊(duì)列內(nèi)有1個(gè)數(shù)A乐!

成功插入眠屎!數(shù)值是:|  H   |,當(dāng)前隊(duì)列內(nèi)有2個(gè)數(shù)L藿弧!

拋出后當(dāng)前只有1個(gè)數(shù)  被拋出來的是:|    G   |
 
拋出后當(dāng)前只有0個(gè)數(shù)  被拋出來的是:|    H   |
 
成功插入改衩!數(shù)值是:|  D   |,當(dāng)前隊(duì)列內(nèi)有1個(gè)數(shù)a!!

現(xiàn)在整個(gè)隊(duì)列中的情況是:|   D    |

******遍歷完成葫督!******

Program ended with exit code: 0

這是在運(yùn)行過程中耗費(fèi)的內(nèi)存竭鞍。我屮艸芔茻,怎么這么多橄镜!這么小的程序吃了我將近0.5M內(nèi)存偎快?OMG!G⒔骸晒夹!


我對(duì)隊(duì)列的認(rèn)識(shí)是就仿佛是幾個(gè)箱子排在一起。然后在連續(xù)的幾個(gè)箱子上姊氓,放一些東西丐怯。用一個(gè)頭指針和一個(gè)尾指針指向這些裝了東西的箱子的頭和尾。如果把箱子圍成一個(gè)圓環(huán)他膳,那么也就是今天我寫的鏈表隊(duì)列實(shí)現(xiàn)了响逢。其實(shí)鏈表和線性表實(shí)現(xiàn)的不同就在于:線性表相當(dāng)于是幾個(gè)擺在一起的箱子,尋找就可以了棕孙。而鏈表就是相當(dāng)于在一大堆雜亂的箱子中舔亭,用繩子把幾個(gè)要裝東西的箱子牽起來些膨。那么在散亂的箱子中也是沒有辦法精確的直接招到每一個(gè)箱子的,所以你就需要順著繩子去找钦铺。這就是鏈表的意義所在订雾。鏈表的優(yōu)勢(shì)就在于你在,插入或者刪除一個(gè)箱子的時(shí)候矛洞,不需要整體的搬動(dòng)著一個(gè)長(zhǎng)隊(duì)伍洼哎,而只要重新拿兩個(gè)繩子,把你要綁的那個(gè)箱子串進(jìn)來就可以了沼本。這極大的噩峦,減小了人力的消耗,放在計(jì)算機(jī)里面就是減少了內(nèi)存消耗抽兆。但是如果要查找识补,那就很麻煩了。至于具體麻煩在哪里辫红?大家自己想一想凭涂,我就不贅述了大家自己想想,我就不贅述了贴妻!

如下為圖解(并非完全按照上述程序來的切油,要細(xì)看程序可以拷貝程序打斷點(diǎn),或者是看我的運(yùn)行結(jié)果):

初始化名惩,也就是創(chuàng)建隊(duì)列(此處為創(chuàng)建鏈表隊(duì)列澎胡,與線性隊(duì)列的區(qū)別在于,存儲(chǔ)的內(nèi)存塊非線性)

給定第一個(gè)值的過程中娩鹉,也就是從空隊(duì)列到含有一個(gè)數(shù)值的隊(duì)列轉(zhuǎn)變滤馍,此處有別的別的入隊(duì)出隊(duì),因?yàn)槲医o他加了一個(gè)front 和 rear同時(shí)運(yùn)動(dòng)的特例底循,以便徹底脫離初始化時(shí)留下的空指針巢株,使得后面可以不用考慮鏈表頭,只有要用的時(shí)候才用熙涤!(no.1)

再次給定數(shù)值入隊(duì)(no.2)

繼續(xù)入隊(duì)(no.3)

第一次出隊(duì)(no.-1)

第二次出隊(duì)(no.-2)

第三次出隊(duì)(no.-3)

第四次入隊(duì)(no.4)

正文之后

如果能夠把寫代碼當(dāng)作一件快樂的事情來對(duì)待阁苞,是不是說明我有學(xué)計(jì)算機(jī)的潛力呢?當(dāng)然現(xiàn)在還是這種很簡(jiǎn)單的代碼祠挫,所以學(xué)得不亦樂乎那槽。以后如果任務(wù)加劇的話,保不準(zhǔn)我會(huì)煩躁等舔,不過也得先走到那一天哪IЬ摹!今天心情不是特別好慌植,因?yàn)閷W(xué)數(shù)學(xué)覺得自己太菜了甚牲。明天繼續(xù)戰(zhàn)斗∫逯#現(xiàn)在下樓去洗澡去咯!嘿嘿丈钙,小妹子現(xiàn)在還沒醒~看我明天怎么臭她非驮。。雏赦。?(?)?

如果有大佬路過劫笙,覺得看我的代碼不順眼。強(qiáng)迫癥犯了星岗,想要幫我精簡(jiǎn)一下代碼或者優(yōu)化一下算法填大,那么請(qǐng)不要吝嗇你的才華,咱們?cè)u(píng)論區(qū)見俏橘!

sublime簡(jiǎn)直是優(yōu)雅的代表對(duì)不對(duì)栋盹?

另外給大家?guī)硪粡埼矣X得非常好看的圖!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敷矫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汉额,更是在濱河造成了極大的恐慌曹仗,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蠕搜,死亡現(xiàn)場(chǎng)離奇詭異怎茫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妓灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門轨蛤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人虫埂,你說我怎么就攤上這事祥山。” “怎么了掉伏?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵缝呕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我斧散,道長(zhǎng)供常,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任鸡捐,我火速辦了婚禮栈暇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘箍镜。我一直安慰自己源祈,他們只是感情好煎源,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著新博,像睡著了一般薪夕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赫悄,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天原献,我揣著相機(jī)與錄音,去河邊找鬼埂淮。 笑死姑隅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倔撞。 我是一名探鬼主播讲仰,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼痪蝇!你這毒婦竟也來了鄙陡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤躏啰,失蹤者是張志新(化名)和其女友劉穎趁矾,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给僵,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫捣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帝际。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔓同。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蹲诀,靈堂內(nèi)的尸體忽然破棺而出斑粱,到底是詐尸還是另有隱情,我是刑警寧澤脯爪,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布珊佣,位于F島的核電站,受9級(jí)特大地震影響披粟,放射性物質(zhì)發(fā)生泄漏咒锻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一守屉、第九天 我趴在偏房一處隱蔽的房頂上張望惑艇。 院中可真熱鬧,春花似錦、人聲如沸滨巴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恭取。三九已至泰偿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜈垮,已是汗流浹背耗跛。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攒发,地道東北人调塌。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像惠猿,于是被迫代替她去往敵國和親羔砾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容