周次windows |
學習時間數組 |
新編寫代碼行數數據結構 |
博客量(篇)函數 |
學到知識點學習 |
第15周spa |
|
160code |
1blog |
【數據結構】棧的迴文實現字符串
|
#include"stdio.h" #include"stdafx.h" #include"stdlib.h" #include"windows.h" #include"conio.h" #include"string.h" #pragma warning(disable 4996) #define FALSE -1 #define TURE 0 #define Stack_Size 50 //設棧中元素個數爲50 typedef char StackElemType; typedef struct { StackElemType elem[Stack_Size]; //用來存儲棧中元素的一維數組 int top; // 用來存儲棧頂元素的下標,top爲 - 1表示空棧 }SeqStack; void InitStack(SeqStack *S); //初始化順序棧 void Push(SeqStack *S, StackElemType x); // 進棧 void Pop(SeqStack *S, StackElemType *x); // 出棧 void GetTop(SeqStack *S, StackElemType *x); //獲取棧頂元素 int SeqMatch(SeqStack *Mys, StackElemType *str);//迴文判斷 int IsEmpty(SeqStack *S); //判斷是否的空棧 void main() { SeqStack Mys; int result; StackElemType str[Stack_Size]; //一個用來判斷是不是迴文的字符串 printf("請輸入字符串:"); gets_s(str); //輸入 result=SeqMatch(&Mys,str); //調用,接收返回值 if (result) { printf("%s 是迴文字符!\n",str); } else { printf("%s 不是迴文字符!\n", str); } system("pause"); } void InitStack(SeqStack *S) { S->top = -1; } void Push(SeqStack *S, StackElemType x) { if (S->top == 49) { printf("棧已滿!"); //return FALSE; } else { S->top++; S->elem[S->top] = x; //printf("%c\t", S->elem[S->top]); //return TURE; } } void Pop(SeqStack *S, StackElemType *x) { if (S->top == -1) { printf("空棧!"); //return -1; } else { *x = S->elem[S->top]; S->top--; //return (TURE); } } void GetTop(SeqStack *S, StackElemType *x) { if (S->top == -1) printf("棧爲空!"); //return FALSE; else { *x = S->elem[S->top]; } } int IsEmpty(SeqStack *S) { if (S->top == -1) { printf("空棧!"); return TURE; } else return FALSE; } /* printf("%d",S->top); system("pause"); */ int SeqMatch(SeqStack *Mys, StackElemType *str) //str爲mian函數輸入的字符串 { char c = ' '; // char temp[Stack_Size]; int flag = 0; //判斷&字符是否出現過 int re = 1; //用來判斷 判斷迴文的過程當中是否失敗 InitStack(Mys); //c = getchar(); //Push(&Mys, c); int i,j; for (i = 0; flag==0 && str[i] != '\0'; i++) { c = str[i]; //將str裏的每一個字符拿出來判斷使用 // temp[i] = c; switch (c) { case'&': flag = 1; break; default: Push(Mys, c); } } StackElemType topelem; //&後的字符,不入棧 for (j = i; str[j]!='\0'; j++) { c = str[j]; //直接傳值c,進行判斷 GetTop(Mys, &topelem); if (topelem == c) { Pop(Mys,&topelem); //成功一個,就刪除棧頂元素繼續匹配 } else { re = 0; //printf("%s 不是迴文字符!"); } } return re; }