妙趣橫生的算法--棧和隊列


棧??????????????????????????????????????????????????????????????????????

棧的特點是先進后出,一張圖簡單介紹一下。image

復制代碼
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10typedef  char ElemType;
typedef struct{ElemType *base;ElemType *top;int stacksize;
}sqStack;void initStack(sqStack *s)
{/*內存中開辟一段連續空間作為棧空間,首地址賦值給s->base*/s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));if(!s->base) exit(0);     /*分配空間失敗*/s->top = s->base;       /*最開始,棧頂就是棧底*/s->stacksize = STACK_INIT_SIZE;   /*最大容量為STACK_INIT_SIZE */
}
void Push(sqStack *s, ElemType e){if(s->top - s->base >= s->stacksize){/*棧滿,追加空間*/s->base = (ElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT)*sizeof(ElemType));if(!s->base) exit(0);   /*存儲分配失敗*/s->top = s->base + s->stacksize;s->stacksize = s->stacksize + STACKINCREMENT; /*設置棧的最大容量*/}*(s->top) = e;  /*放入數據*/s->top++;
}void Pop(sqStack *s , ElemType *e){if(s->top == s->base) return;//棧里面沒有元素了則返回
    *e = *--(s->top); //刪除棧頂的元素    
}int StackLen(sqStack s){return (s.top - s.base) ;//計算棧的長度 
}
void main()
{ElemType c;sqStack s;int len , i , sum = 0;printf("Please input a Binary digit\n");initStack(&s);  /*創建一個棧,用來存放二進制字符串*//*輸入0/1字符表示的二進制數,以#結束*/scanf("%c",&c);while(c!='#')//遇到#則結束{Push(&s,c);//輸入一個壓入一個scanf("%c",&c);}len = StackLen(s);  /*得到棧中的元素個數,即二進制數的長度*/for(i=0;i<len;i++){Pop(&s,&c);sum = (int)(sum + (c-48) * pow(2,i));  /*轉換為十進制*/
        //二進制轉十進制的算法 }printf("Decimal is %d\n",sum);
}
復制代碼

隊列??????????????????????????????????????????????????????????????????

隊列的特點是先進先出,就跟我們平常排隊一個意思。image

復制代碼
#include "stdio.h"
#include "stdlib.h"
typedef char ElemType;
typedef struct QNode{ElemType data;struct QNode *next;
} QNode , *QueuePtr;
typedef struct{QueuePtr front;   //隊頭指針QueuePtr rear;    //隊尾指針
}LinkQueue;void initQueue(LinkQueue *q){/*初始化一個空隊列*/q->front = q->rear = (QueuePtr)malloc(sizeof(QNode)); /*創建一個頭結點,隊頭隊尾指針                                                                指向該結點*/if( !q->front) exit(0);     /*創建頭結點失敗*/q->front->next = NULL;     /*頭結點指針域置NULL*/
}void EnQueue(LinkQueue *q, ElemType e){QueuePtr p;p = (QueuePtr)malloc(sizeof(QNode));  /*創建一個隊列元素結點*/if( !q->front) exit(0);     /*創建頭結點失敗*/p->data = e;//元素節點寫入數據p->next = NULL;//元素節點的向后的指針指向空
    q->rear ->next = p;//將隊列中的隊尾指針指向剛生成的元素節點q->rear = p;
}
void DeQueue(LinkQueue *q, ElemType *e){/*如果隊列q不為空,刪除q的隊頭元素,用e返回其值*/QueuePtr p;if(q->front == q->rear) return;  /*隊列為空,返回*/p = q->front->next;//隊頭給p*e = p->data;//取出來的隊頭的數據
    q->front->next = p->next;//取出來的隊頭的下一個指向給新的隊頭的指向if(q->rear == p) q->rear = q->front;  /*如果隊頭就是隊尾,則修改隊尾指針*/free(p);
}
/*測試函數*/
void main()
{ElemType e;LinkQueue  q;initQueue(&q);           /*初始化一個隊列q*/printf("Please input a string into a queue\n");scanf("%c",&e);while(e!='@'){EnQueue(&q,e);   /*向隊列中輸入字符串,以@表示結束*/ scanf("%c",&e);}printf("The string into the queue is\n");while(q.front != q.rear){   /*將隊列中的元素出隊列,并打印在屏幕上*/DeQueue(&q,&e);printf("%c",e);}printf("\n");
}
復制代碼

?

?




本文轉自我愛物聯網博客園博客,原文鏈接:http://www.cnblogs.com/yydcdut/p/3667093.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257164.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win10系統開不了機

電腦裝了雙系統&#xff0c;從ubuntu切回win10系統后&#xff0c;win10系統開不了機&#xff0c;一直轉圈&#xff0c;修復結果是什么C:\WINDOWS\System32\Logfiles\Srt\SrtTrail.txt問題&#xff0c;是了網上的常用方法都沒成功。 最后我的解決方案&#xff1a;強制關機后開機…

Android SDK打包

2015年6月18日 14:38:49 星期四 eclipse: 1. 將寫好的代碼上傳版本庫 2. 刪除 /bin/* 3. eclipse->project->clean... 4. 上一步自動生成 /bin/xx.jar 5. 復制/bin/xx.jar 到 /libs/xx.jar 6. 刪除 /src/* 7. 連同demo和剛才的工程文件夾壓縮給到對方(這樣可以避免包命…

MySQL 5.7.11 重置root密碼

1.修改/etc/my.conf&#xff0c;添加參數skip-grant-tables 2.重啟mysql service mysqld stop service mysqld start 3.用root 直接登錄 [rootbogon ~]# mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server versio…

resure挽救筆記本系統和一些相關的操作記錄

使用fedora23很久了, 但是感覺不是很流暢, 出現了一些不太穩定的體驗, 所以想改到centos7. 因為centos7的很多東西 跟 fedora23 很相近了. 所以應該是無縫過渡是選擇32位的系統還是選擇64位的系統?還是要使用 32位的 它是90%的人的選擇使用, 是普通人的通用選擇, 幾乎支持linu…

2021-06-08

opencv無法讀取mp4文件opencv讀取mp4文件時&#xff0c;總是VideoCapture.isopen()返回0,即無法打開cap。解決方法&#xff0c;將opencv安裝包的opencv_videoio_ffmpeg451_64文件復制進工程中。

Web網頁布局的主要方式

一、靜態布局&#xff08;static layout&#xff09; 即傳統Web設計&#xff0c;網頁上的所有元素的尺寸一律使用px作為單位。 1、布局特點 不管瀏覽器尺寸具體是多少&#xff0c;網頁布局始終按照最初寫代碼時的布局來顯示。常規的pc的網站都是靜態&#xff08;定寬度&#xf…

HDU 3966 Aragorn's Story (樹鏈點權剖分,成段修改單點查詢)

題目鏈接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3966 樹鏈剖分的模版&#xff0c;成段更新單點查詢。熟悉線段樹的成段更新的話就小case啦。 1 //樹鏈剖分 邊權修改 單點查詢2 #include <iostream>3 #include <cstring>4 #include <algorithm&…

微信分享無響應的解決

微信分享無響應的解決 最近使用友盟的社會化分享&#xff0c;集成到程序中進行分享功能的開發。 可是一開始還是可以正常使用&#xff0c;今天突然發現微信分享&#xff08;好友分享和朋友圈分享&#xff09;均是點擊沒有響應&#xff0c;也就是點擊后&#xff0c;沒有任何回饋…

x64電腦連接x32共享打印機

下載64位打印機驅動到64位電腦&#xff0c;在連接32位共享打印機出錯時出現在本地尋找相關inf文件&#xff0c;此時將64位打印機驅動解壓(不在64位本地安裝)并找到相應inf文件&#xff0c;載入即可連接成功。

HTML中的br標簽講解(菜鳥)

br標簽&#xff1a;如何在HTML中換行&#xff1f;可以使用br標簽 1.br標簽作用&#xff1a;換行 2.br標簽格式&#xff1a;<br/> 3.br標簽的注意點&#xff1a; 3.1多個br標簽可以連續使用&#xff0c;使用了多少個br標簽就會換多少行 3.2由于HTML的作用就是用來給文本添…

Cocos2d-3.x版的HelloWorld工程分析 (二)

我們HelloWorld 從applicationDidFinishLaunching()后&#xff0c; 大部分人都會從這部分代碼開始研究&#xff0c;如果想要研究main函數 如何調用applicationDidFinishLaunching() 傳送門 http://blog.csdn.net/hiwoshixiaoyu/article/details/51472707 #include "App…

安卓中bundle的使用

Bundle類用作攜帶數據&#xff0c;它類似于Map&#xff0c;用于存放key-value形式的值&#xff0c;相對于Map&#xff0c;它提供了各種常用類型的putXxx()/getXxx()方法&#xff0c;Bundle的內部實際上是使用了HashMap類型的變量來存放PutXxx()方法存入的值。 SDK里是這樣描述&…

NO.1 python_人工智能_學習路線

***##學習路線&#xff1a;* 1.python基礎 計算機組成原理、python開發環境、python變量、流程控制語句、文件操作、異常處理、模塊與包、飛機大戰游戲制作等 2.python高級應用 網絡編程、并發編程、數據庫編程、正則表達式、Linux系統應用、函數的高級應用、python的語法進階…

wds+mdt 分布式自動部署 操作系統

一、 安裝準備 1、工具的準備 首先介紹本次項目所涉及到的內容&#xff1a; MDT Microsoft Deployment Toolkit 2012&#xff08;簡稱MDT 2012&#xff09;是微軟最新一代部署工具&#xff0c;通過它可以自動完成桌面和服務器部署的推薦操作進程和工具&#xff0c;MDT主要…

iOS開發網絡篇—數據緩存

iOS開發網絡篇—數據緩存 一、關于同一個URL的多次請求 有時候&#xff0c;對同一個URL請求多次&#xff0c;返回的數據可能都是一樣的&#xff0c;比如服務器上的某張圖片&#xff0c;無論下載多少次&#xff0c;返回的數據都是一樣的。 上面的情況會造成以下問題 &#xff08…

[WinError 10061] 由于目標計算機積極拒絕,無法連接錯誤解決辦法

爬蟲的時候會經常出現"[WinError 10061] 由于目標計算機積極拒絕&#xff0c;無法連接"錯誤這種情況&#xff0c;有可能是LAN口設置不正確 我是在爬取全國天氣情況的時候出現的這種錯誤&#xff0c;后面調了以后可以了1.控制面板——網絡和 Internet—— Internet選項…

Chrome瀏覽器設置小窗口視頻

快捷工具先安裝1.28版本后用1.31版本替換&#xff0c;以實現視頻彈窗和雙擊關閉標簽頁功能。 首先下載Chrome擴展快捷工具1.28版的CRX安裝包&#xff1a;http://pan.baidu.com/s/1pJ4T4td&#xff1b; 然后拖放到chrome擴展管理頁面中安裝。 接著&#xff0c;下載打包好的快捷…

這門課有什么用?

每個老師都苦惱于學生常問的問題&#xff1a;“某某課學了有什么用&#xff1f;”老師費勁巴拉解釋一通&#xff0c;結果還是&#xff1a;然并卵。 一門課有什么用&#xff0c;很難解釋得令人信服&#xff0c;因為這和人的認知水平有關。認知水平達不到&#xff0c;解釋的多深入…

NO.1_python_scrapy組成爬取多頁數據連接數據庫配置文件書寫

scrapy框架組成及各部分作用 item pipelines: 用于存放需要存儲數據的數據模型&#xff0c;一般格式為&#xff1a; #需要存儲多少中類型的數據就寫多少行&#xff0c;一般是key_value組合 數據名稱&#xff0c;即key scrapy.Field()spiders 用于解析返回來的response im…

“智云大咖秀”:大咖攝影師談驚艷亮相的“大咖級”設備

古人云&#xff0c;善書者不擇筆。 古人又云&#xff0c;工欲善其事必先利其器。 古人很矛盾。 這兩句話如果用在影像創作這個領域&#xff0c;可以說都有道理&#xff1a;沒有好的設備&#xff0c;創意大師一樣能夠拍出足夠驚艷的作品&#xff1b;有足夠強的設備&#xff0c;但…