棧和佇列判斷回文數

2021-08-01 10:27:51 字數 1587 閱讀 9016

假設稱正讀和反讀都相同的字串行為「回文」,例如』abba』和』abcba』是回文,』abcde』』ababab』則不是回文,試編寫演算法判別讀入的乙個以「@」為結束符的字串行是否為「回文」。

由於依次輸入的字串行中不含特殊的分隔符,則在判別是否是回文時,可以同時利用棧和佇列兩種結構來實現。

#include#include//順序棧的函式宣告

typedef struct qnode

qnode;

typedef struct linkqueue

linkqueue;

typedef struct

stack;

stack* create_stack()

p->word=(char *)malloc(100*sizeof(char));

if(!p->word)

p->top=0;

p->size=100;

return p;

}void push(stack *p,char letter)

if(!p->word)

p->word[p->top]=letter;

p->top++;

}char pop(stack *p)

p->top--;

char ch=p->word[p->top];

p->word[p->top]=null;

return ch;

}bool empty_stack(stack *p)

//鏈佇列的函式宣告

linkqueue* create_linkqueue()

qnode *qnode = (qnode *)malloc(sizeof(qnode));

if(!qnode)

linkqueue->front=qnode;linkqueue->rear=qnode;

linkqueue->front->next=null;

return linkqueue;

}void enqueue(linkqueue *linkqueue,char ch)

qnode->letter=ch;

qnode->next=null;

linkqueue->rear->next=qnode;

linkqueue->rear=linkqueue->rear->next;

}char dequeue(linkqueue *linkqueue)

qnode *qnode_del=linkqueue->front->next;

ch = qnode_del->letter;

linkqueue->front->next=qnode_del->next;

if(linkqueue->rear==qnode_del)linkqueue->rear=linkqueue->front;

free(qnode_del);

return ch;

}void main()

while(!empty_stack(stack1))

printf("%s",ispalindrome? "是回文": "不是回文");

}

回文判斷(棧 佇列)

我們把正讀和反讀都相同的字串行稱為 回文 例如abba和abcba是回文,abcde不是回文。嘗試寫乙個演算法判別讀入的乙個以 為結束符的字元是否是回文。輸入格式 輸入為一行,為待判斷的字串,以 結尾。字串長度不超過 100100,除最後乙個字元外,其餘字元均由小寫字母組成。輸出格式 輸出一行,如果...

回文 棧和佇列

題目描述 假設稱正讀和反讀都相同的字串行為 回文 例如,abba 和 abcba 是回文,abcde 和 ababab 則不是回文。試寫乙個演算法判別字串行是否是 回文 輸入abcba 輸出是回文 樣例輸入 copy ababab 樣例輸出 copy 不是回文 分析 本題的話,我們可以利用棧。棧彈出...

C語言使用棧和佇列來判斷回文

演算法思想 使用棧和佇列來分別接受輸入的字串,利用棧先進後出,佇列先進先出的特點進行前後比較來判斷是否是回文 你可以使用雙端佇列更好的解決問題。使用陣列的話,又長又不高效 include include include include using namespace std define maxsi...