演算法訓練-按位列印資料
問題描述
編寫程式,實現從鍵盤輸入一個正整數,輸出該正整數的位數及每位數
輸出樣例
1234
輸出樣例
第1位是1
第2位是2
第3位是3
第4位是4
共有4位
解題思路
使用佇列接收所有的字元,並記錄佇列的入隊數,而後字元出隊,列印字元
程式實現
#include <stdio.h> #include <stdlib.h> typedef struct Queue { int data; struct Queue *next; } Queue; typedef struct LinkQueue { Queue *front; Queue *rear; } LinkQueue; int initQueue(LinkQueue *linkQueue); int enterQueue(LinkQueue *linkQueue, char number); char outQueue(LinkQueue *linkQueue); /** * 使用佇列儲存得到的每一位字元 * 記錄輸入的字元數 * 出隊列印佇列中的資料 */ int main(int argc, char *argv[]) { LinkQueue link; initQueue(&link); char number; number = getchar(); int i = 0; while (number != '\n') { enterQueue(&link, number); i++; number = getchar(); } for (int j = 1; j <= i; j++) { printf("第%d位是:%c\n", j, outQueue(&link)); } printf("共有%d位", i); return 0; } /** * 初始化佇列 */ int initQueue(LinkQueue *linkQueue) { linkQueue->front = (Queue*)malloc(sizeof(Queue)); if (linkQueue->front != NULL) { linkQueue->rear = linkQueue->front; linkQueue->front->next = NULL; return 1; } else { return 0; } } /** * 入隊操作 * linkQueue:佇列 * number:輸入的字元 */ int enterQueue(LinkQueue *linkQueue, char number) { Queue *q = (Queue *)malloc(sizeof(Queue)); if (q != NULL) { q->data = number; q->next = NULL; linkQueue->rear->next = q; linkQueue->rear = q; } else { return 0; } return 1; } /** * 出隊操作 * linkQueue:佇列 * return:出隊的字元 */ char outQueue(LinkQueue *linkQueue) { char number; Queue *q; if (linkQueue->front == linkQueue->rear) { return 0; } q = linkQueue->front->next; linkQueue->front->next = q->next; if (linkQueue->rear == q) { linkQueue->rear = linkQueue->front; } number = q->data; free(q); return number; }
執行結果
相關推薦
演算法訓練-按位列印資料
問題描述 編寫程式,實現從鍵盤輸入一個正整數,輸出該正整數的位數及每位數 輸出樣例 1234 輸出樣例 第1位是1 第2位是2 第
個人感覺最優的按位翻轉資料演算法
unsigned char ReverseBits(unsigned char ch){ ch = (ch & 0x55) << 1 | (ch >> 1) & 0x55; ch = (ch & 0x
演算法訓練 4-1列印下述圖形
#include<stdio.h> int main() { int n; scanf("%d",&n); int max; max=2*n-1; int i,j; for(i=1;i<=n;i++) { for
ALGO-85演算法訓練 進位制轉換
演算法訓練 進位制轉換 時間限制:1.0s 記憶體限制:512.0MB 問題描述 編寫一個程式,輸入一個二進位制的字串(長度不超過32),然後計算出相應的十進位制整數,並把它打印出來。
藍橋杯 ALGO-145 演算法訓練 4-1列印下述圖形
藍橋杯 演算法訓練---------題解 演算法訓練 4-1列印下述圖形 時間限制:1.0s 記憶體限制:256.0MB 問題描述 使用迴圈結構列印下述圖形,列印行數n由使用者輸入。列印空格時使
#資料結構與演算法學習筆記#劍指Offer29:整數中1出現的次數 + 分段思想/按位考慮 + 測試用例(Java、C/C++)
2018.10.5 感受到開學之後工作和課業的雙重壓力,加上近段時間自己出了點小事故,因此斷更了許久。沒事,繼續。 這道題有兩種複雜度為的演算法。 方法1:遞迴(分段思想)。 所有數字出現1的個數 = 每一段數字中出現1的個數之和 1. 對於輸出的數字n,其最高位為
mysql按時間段統計資料 欄位為時間戳
SELECT FROM_UNIXTIME(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks;
java File按層級目錄列印資料夾內容
將指定目錄下的所有檔案和資料夾的名字按層級關係列印,也可以從控制檯獲取需要列印的目錄 按照如下樣式: world 1.txt 2.txt 3.txt &
作業:位演算法訓練3
題目:輸入一個整數a,再輸入兩個整數p1,p2(p1,p2<32),將該整數的二進位制表示方法中從右端開始的p1到p2位取反後輸出 #include <stdio.h> void PrintBin(int a, int p1, int p2)
ALGO-107演算法訓練 9-7連結串列資料求和操作 (c++)
演算法訓練 9-7連結串列資料求和操作 時間限制:1.0s 記憶體限制:512.0MB 讀入10個複數,建立對應連結串列,然後求所有複數的和。 樣例輸入 1 2 1 3 4 5 2
iOS藍芽開發 —— 連線列印機發送16進位制資料的問題
最近在做公司的一個藍芽連線印表機的專案,正常的藍芽連線印表機進行列印沒問題,但是要傳送一個16進位制的指令來獲取藍芽裝置資訊時頗費了一番功夫,現做如下記錄: Byte byteArray[] = {0x1d ,0x67 ,0x61}; NSData *sendData = [NSData data
串列埠高效能處理串列埠資料,按位讀取處理案例
在現在的工控或者家用裝置通訊專案中,用到很多串列埠或者類串列埠通訊協議,其中 很多協議需要讀取操作,在讀取中為了防止阻塞,提高處理效能,縮短處理時間經常用到 select 函式來 讀取串列埠資料,select 是linux 真是個 神器啊,監控某一個檔案或者裝置,當有緩衝過來即可處理,而為了試用不同協議的長短
演算法訓練 Lift and Throw (DFS && 位運算)
問題描述 給定一條標有整點(1, 2, 3, …)的射線. 定義兩個點之間的距離為其下標之差的絕對值. Laharl, Etna, Flonne一開始在這條射線上不同的三個點, 他們希望其中某個人能夠到達下標最大的點. 每個角色只能進行下面的3
thinkphp 按指定欄位統計資料條數
$shops = $Table->field('id , count(weekday) as num')->where($where)->group('weekday')->select();結果Array( [0] => Array ( [i
Android 列印輸出16進位制資料
最近在做安卓於硬體通訊的專案,傳輸資料都是十六進位制, 研究了一下安卓列印十六進位制的方法。 public class test { public static void main(String[] args) {for(int i=0x0;i<=0xf;i++){
位運算之——按位與(&)操作——(快速取模演算法)
位運算之——按位與(&)操作——(快速取模演算法) 由於位運算直接對記憶體資料進行操作,不需要轉成十進
JAVA 按位運算符的解釋
按位運算符 位運算 按位按位運算符Java定義了幾個按位運算符,可以將其應用於整數類型long,int,short,char和byte。按位運算符對位執行,並執行逐位運算。假設a = 60和b = 13; 現在以二進制格式,他們將如下 -a = 0011 1100b = 0000 1101--------
整型數字按位取
signed one span post count pac -s div i++ #include "stdafx.h" #include <windows.h> void countone2(int N) { int a = N; int count =
用異或代替按位求反
進制 code vc6.0 代碼 xor 想要 意思 6.0 div 按位取反,意思是原來的每一位,1變0,0變1。 按照這個1變0,0變1的標準,若求x的按位取反值,可以用求異或來替代。 異或的本質是模二加,效果是相同為1,相異為0。 對於x = 10101,想要用異或來
JavaSE7基礎 位運算 int類型變量進行 按位 與或非異或
網上 深入 ava demo new 與或非 反碼 技術分享 notepad jdk版本 :jdk-7u72-windows-i586系統 :Windows7編輯器 :Notepad++ v7.4.2註意事項 :博文內容僅供參考,不可用於其他用途。 代