1. 程式人生 > >演算法訓練-按位列印資料

演算法訓練-按位列印資料

問題描述

編寫程式,實現從鍵盤輸入一個正整數,輸出該正整數的位數及每位數

輸出樣例

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註意事項 :博文內容僅供參考,不可用於其他用途。 代