1. 程式人生 > >c語言:順序棧的應用(二) 判斷迴文數

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