編寫判斷一個字元序列是否為迴文。迴文是指一個字元序列以中間 字元為基準兩邊字元完全相同,即順著看和倒著看是相同的字元序列。
標頭檔案:函式的宣告
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef char ElemType;
//鏈式堆疊結點型別定義
typedef struct snode
{
ElemType data;
struct snode *next;
}LSNode;
//只有隊尾指標的鏈式迴圈佇列型別定義
typedef struct QNode
{
ElemType data;
struct QNode *next;
}LQNode,*LinkQueue;
void InitStack(LSNode **head);
int StackEmpty(LSNode *head);
int PushStack(LSNode *head,ElemType e);
int PopStack(LSNode *head,ElemType *e);
void InitQueue(LinkQueue *rear);
int QueueEmpty(LinkQueue rear);
int EnQueue(LinkQueue *rear,ElemType e);
int DeQueue(LinkQueue *rear,ElemType *e);
函式的定義
#include "鏈式佇列.h"
void InitStack(LSNode **head)
{
if((*head = (LSNode*)malloc(sizeof(LSNode))) == NULL)
{
printf("分配結點不成功!");
exit(-1);
}
else
{
(*head)->next = NULL;
}
}
int StackEmpty(LSNode *head)
{
if(head->next == NULL)
{
return 1;
}
else
{
return 0;
}
}
int PushStack(LSNode *head,ElemType e)
{
LSNode *s;
if((s = (LSNode*)malloc(sizeof(LSNode))) == NULL)
{
return 0;
}
else
{
s->data = e;
s->next = head->next ;
head->next = s;
return 1;
}
}
int PopStack(LSNode *head,ElemType *e)
{
LSNode *s = head->next ;
if(StackEmpty(head))
{
return 0;
}
else
{
head->next = s->next ;
*e = s->data ;
free(s);
return 1;
}
}
void InitQueue(LinkQueue *rear)
{
if((*rear = (LQNode*)malloc(sizeof(LQNode))) == NULL)
{
exit(-1);
}
else
{
(*rear)->next = *rear;
}
}
int QueueEmpty(LinkQueue rear)
{
if(rear->next = rear)
{
return 1;
}
else
{
return 0;
}
}
int EnQueue(LinkQueue *rear,ElemType e)
{
LQNode *s;
s = (LQNode*)malloc(sizeof(LQNode));
if(!s)
{
return 0;
}
else
{
s->data = e;
s->next = (*rear)->next ;
(*rear)->next = s;
*rear = s;
return 1;
}
}
int DeQueue(LinkQueue *rear,ElemType *e)
{
LQNode *f,*p;
if(*rear == (*rear)->next)
{
return 0;
}
else
{
f = (*rear)->next;
p = f->next;
if(p == *rear)
{
*rear = (*rear)->next ;
(*rear)->next = *rear;
}
else
{
f->next = p->next;
}
*e = p->data;
free(p);
return 1;
}
}
函式的應用
#include "鏈式佇列.h"
/*編寫判斷一個字元序列是否為迴文。迴文是指一個字元序列以中間
字元為基準兩邊字元完全相同,即順著看和倒著看是相同的字元序列。*/
int main(void)
{
LinkQueue LQueue1,LQueue2;
LSNode *LStack1,*LStack2;
char str1[] = "ABCDCBA";
char str2[] = "ABCBCAB";
char q1,q2,s1,s2;
int i;
InitStack(&LStack1);
InitStack(&LStack2);
InitQueue(&LQueue1);
InitQueue(&LQueue2);
for(i = 0;i < strlen(str1);i++)
{
EnQueue(&LQueue1,str1[i]);
PushStack(LStack1,str1[i]);
}
for(i = 0;i < strlen(str2);i++)
{
EnQueue(&LQueue2,str2[i]);
PushStack(LStack2,str2[i]);
}
printf("字元序列1:\n");
printf("出隊序列 出棧序列\n");
while(!StackEmpty(LStack1))
{
DeQueue(&LQueue1,&q1);
PopStack(LStack1,&s1);
printf("%5c",q1);
printf("%10c\n",s1);
if(q1 != s1)
{
printf("字元序列1不是迴文!");
return 0;
}
}
printf("字元序列1是迴文!\n");
printf("字元序列2:\n");
printf("出隊序列 出棧序列\n");
while(!StackEmpty(LStack2))
{
DeQueue(&LQueue2,&q2);
PopStack(LStack2,&s2);
printf("%5c",q2);
printf("%10c\n",s2);
if(q2 != s2)
{
printf("字元序列2不是迴文!");
return 0;
}
}
printf("字元序列2是迴文!\n");
return 0;
}
相關文章
- 判斷是否為迴文字元字元
- 利用正規表示式判斷一個給定的字元是否是迴文字元
- PHP 判斷一個字元是否在字串中PHP字元字串
- isAlnum判斷字元是否為字母數字字元(字母和數字都屬於字母數字字元)字元
- 劍指Offer 字元流中第一個不重複的字元字元
- 字元流中第一個不重複的字元字元
- js 字串中取得第一個字元和最後一個字元JS字串字元
- 《劍指offer》:[55]字元流中第一個不重複的字元字元
- 迴文分割;及刪除字元分析字元
- 字元判斷字元
- C#實現判斷字元是否為中文C#字元
- 輸入字串,判斷是否為迴文字串,即前後對稱的(單個字元,不帶空格)字串字元
- 得到字串 位元組 長度 中文 兩個字元 英文一個字元字串字元
- 判斷是什麼字元字元
- js判斷字串中是否含有指定字元JS字串字元
- C語言:判斷一個字串是否為迴文C語言字串
- sqlserver判斷欄位值是否存在某個字元SQLServer字元
- CSS段落首字元縮排兩個字元CSS字元
- 將一個字串中含有全形的數字字元、字母、空格或'%+-()'字元轉換為相應半形字元字串字元
- js如何查詢字元處中第一個不重複的字元JS字元
- STL(十七)string基本字元序列容器字元
- js如何判斷字串中是否含有指定字元JS字串字元
- js全形字元轉為半形字元JS字元
- JS判斷字串長度(英文佔1個字元,中文漢字佔2個字元)JS字串字元
- 如何確定一個字串中是否所有字元全部互不相同字串字元
- mysql如何判斷不包含某個字元MySql字元
- 迴圈實現從一個陣列中按順序任意擷取幾個字元。陣列字元
- Python:判斷一個正整數是否為迴文數Python
- 判斷檔案中是否存在中文字元字元
- js判斷字串是否含有特殊字元和emoji表情JS字串字元
- [每日一題] 判定是否互為字元重排每日一題字元
- 去除重複字母(不同字元的最小序列)問題字元
- js視訊轉字元畫 —— 寫一個屬於自己的字元轉換器JS字元
- 輸入兩個長度相同的字串,比較兩個數在相同位置的字元是否相同字串字元
- NSPredicate 不能判斷全形字元字元
- 利用棧和隊來判斷輸入的一個字串是否為迴文字串
- 字元作畫,我用字元畫個冰墩墩字元
- 33判斷字串是否為迴文字串