假設稱正讀和反讀都相同的字串行為「回文」,例如』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...