c語言:順序棧的應用(二) 判斷迴文數
#include<iostream>
#include<stdio.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
using namespace std;
typedef struct Stack //結構體定義
{
int *elem; //資料域
int top; //順序棧棧頂
int stacksize; //順序棧當前長度
}Stack;
//函式宣告部分
void Error(char *s); //錯誤處理函式
void Init_Stack(Stack &l); //初始化順序棧
void Destroy_Stack(Stack & l); //銷燬順序棧
void Push_Stack(Stack &L, int e); //壓棧操作函式
int Pop_Stack(Stack &L, int e); //出棧操作函式
void Increment_Stack(Stack & l); //增加順序棧空間函式
void Judge_Stack(Stack &l); //判斷是否為迴文數
//函式實現部分
void Error(char *s)
{
cout << s << endl;
exit(1);
}
void Init_Stack(Stack &l)
{
l.elem = new int[STACK_INIT_SIZE];
if (!l.elem)
Error("記憶體申請失敗!");
l.top = -1;
l.stacksize = STACK_INIT_SIZE;
}
void Destroy_Stack(Stack &l)
{
delete[] l.elem;
l.top = -1;
l.stacksize = 0;
cout << "該順序棧銷燬成功!" << endl;
}
void Increment_Stack(Stack &l)
{
int *newstack = new int[l.stacksize + STACK_INCREMENT];
if (!newstack)
Error("儲存分配失敗!");
for (int i = 0; i < l.top; i++)
{
newstack[i] = l.elem[i];
}
l.elem = newstack;
delete[] l.elem;
l.stacksize += STACK_INCREMENT;
}
void Push_Stack(Stack &l, int e)
{
if (l.top == (l.stacksize - 1))
Increment_Stack(l);
l.elem[++l.top] = e;
}
int Pop_Stack(Stack &l, int e)
{
if (l.top == -1)
Error("該順序棧為空棧!");
return e = l.elem[l.top--];
}
void Judge_Stack(Stack *s) //判斷是否是迴文數函式
{Init_Stack(*s); //初始化順序棧
char t[250]; //申請記憶體
cout << "請輸入要判斷的數:" << endl;
cin >> t;
int i, len;
int e = 0;
char temp;
len = strlen(t); //計算迴文數長度
for (i = 0; i <len / 2; i++) //將回文數的一半壓棧
{
Push_Stack(*s, t[i]);
}
if (len % 2 == 1) //判斷字元長度是奇數還是偶數,奇數加一
i++;
while (s->top>-1)
{
temp = Pop_Stack(*s, e); //將壓入棧的元素出棧,賦給temp
if (temp != t[i]) //比較兩個字元的大小
{
cout << "該數不是迴文數!"<<endl; //第一個不相等就直接跳出,沒必要比較後面的部分
exit(1);
}
else //否則繼續比較大小,直到結束
i++;
}
cout << "該數是迴文數!" << endl;
}
int main()
{
Stack s;
Judge_Stack(&s);
}
相關推薦
c語言:順序棧的應用(二) 判斷迴文數
#include<iostream> #include<stdio.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 using namespace std; typedef stru
C語言:單鏈表實現(二) 就地逆置,就地歸併
#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef
c語言實現通用資料結構(二):通用佇列
注意佇列中只儲存了指標,沒有儲存實際的資料。 標頭檔案 myQueue.h #ifndef MYQUEUE_H_INCLUDED #define MYQUEUE_H_INCLUDED #include "myList.h" typedef My
c語言:順序棧的實現
#include<iostream> #include<stdio.h> #include<math.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 using name
C語言老司機學Python (二)
append 設計 sta one list 老板 com oob als 標準數據類型: 共6種:Number(數字),String(字符串),List(列表),Tuple(元組),Sets(集合),Dictionary(字典) 本次學習主要是和數據類型混個臉熟,
《面向物件程式設計——C++語言描述》學習筆記(二)
第二章 從C到C++ 2.1main函式 1.C++中需要寫int main()不能只是main() 2.main()函式裡面最後有一個return 0; 3.main()被啟動程式碼呼叫,而啟動程式碼是編譯器新增到程式中的,是程式和作業系統的橋樑。 4.C++中main()中
C語言學習_查詢演算法(二)
3 分塊查詢 演算法思想:將待查的元素均勻的分成塊,塊間按大小順序排序,塊內不排序。 具體的,設待查元素有15 個,將其按關鍵字大小分成3塊,這15個數的排列是一個有序序列,也可以給出無序序列,但也是必須得滿足分在第一塊中的任意元素小於第二塊中的所有數,第二塊中的任意元素
C語言面試題---指標篇(二)
# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {
c語言位元組對齊問題(二)
上一篇已經說了一些基本的struct成員變數的記憶體對齊的問題,現在來進一步看看位域在struct的運用,對減少記憶體的使用很用幫助,特別是在嵌入式領域。廢話不多說了,看下面結構體 struct s { char a:4; int b:8;
C語言的檔案的操作(二)
C語言的檔案的操作(二) 八.資料塊讀寫 #fread 函式是從檔案中讀出資料塊。 int fread(void *buf, int size, int count, FILE *fp); #fwrite函式是向檔案寫入資料塊。 int fwrite(void *buf
C#第三週上機實驗(二)判斷是否潤年
實驗要求:輸入一個年份,判斷是否潤年(被4整除,且不被100整除,或者被400整除) 原始碼: using System; using System.Collections.Generic; using System.Linq; using System.Text; na
c語言:順序表的實現(二 ) 就地逆置,有序合併,大小調整。
#include<iostream> #include<stdio.h> #define LIST_INIT_SIZE 100 using namespace std; struct Node { int *elem; int Len
資料結構篇:鏈棧應用(括號匹配)(C++)
很簡單,掌握棧的基礎知識即可。 #include <iostream> #include <string.h> using namespace std; struct Node { int data; Node *next; }; class
C# Queue與RabbitMQ的愛恨情仇(文末附原始碼):Q與MQ訊息佇列簡單應用(二)
上一章我們講了佇列( Queue),這一章我們講Message Queue訊息佇列,簡稱MQ。 定義: MQ是MessageQueue,訊息佇列的簡稱(是流行的開源訊息佇列系統,利用erlang語言開發)。MQ是一種應用程式對應用程式的通訊方法。 應用程式通過讀寫入隊和出隊的訊息來通訊,無
c語言:順序表傳參要是指針類型的才能改變順序表
過去的 oca 頭文件 def blog 文件中 data div log 想在頭文件中初始化順序表,在main函數只能傳參的時候傳的是(sqlList L),調用LocalElem(L,X)是報錯說沒有給L初始化. 原因:調用初始化的函數,傳過去的參數是sqlList L
c語言數字圖像處理(五):空間濾波
element tex play ali p s pla lte ret void 空間濾波原理 使用大小為m*n的濾波器對大小為M*N的圖像進行線性空間濾波,將濾波器模板乘以圖像中對應灰度值,相加得模板中心灰度值
Spring Boot Actuator詳解與深入應用(二):Actuator 2.x
《Spring Boot Actuator詳解與深入應用》預計包括三篇,第一篇重點講Spring Boot Actuator 1.x的應用與定製端點;第二篇將會對比Spring Boot Actuator 2.x 與1.x的區別,以及應用和定製2.x的端點;第三篇將會介紹Actuator metric指
初學C語言(5):逆序輸出片語 ,判斷迴文數
#include #include<assert.h> using namespace std; void reverse(char *pbegin, char *pend ) // 將一句話 片語逆序輸出 { char tmp = 0; while (pbegin < p
fastText(三):微博短文字下fastText的應用(二)
上一篇講到,fastText在訓練資料中過擬合的問題。接下來將介紹一些提高fastText泛化能力的嘗試。 模型泛化使用過fastText的人,往往會被它的很多特性徵服,例如訓練速度、兼具word embedding和分類等。但是正如一個硬幣有正反兩面,fastText也並非完美,fastText的泛化性是
C語言實現順序棧的初始化&進棧&出棧&讀取棧頂元素
/*順序表實現棧的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define Stack_Size 50 //設棧中元素個數為50 #define OK 1 #define ERROR 0