編寫乙個演算法,判斷任意給定的字串行是否為回文。所謂回文是指乙個把字串行的中間字元作為基準,兩字元完全相同,即從兩個方向看,都是相同的字串行。
例如,字串行「abcdefedcba」為回文,而字串行「xabcdcaax」不是回文。
【分析】
這個題目考察對棧的「後進先出」思想和佇列的「先進先出」思想理解及應用,判斷是否為回文可通過構造棧和佇列來實現。具體做法是:可以先把乙個字串行分別入隊和入棧,然後將字元出隊和出棧,這是利用了出隊的順序和出棧的順序剛好相反,同時比較出隊的字元和出棧的字元是否相等,若相等,則繼續取出佇列和棧中的下乙個字元進行比較,直到棧和隊列為空,表明該字串行為回文;若有字元不相等,則該字元不是回文。
linkqueue.h
#pragma once
#include using namespace std;
#include typedef char datatype;
typedef struct qnode
lqnode,*queueptr;
typedef struct
linkqueue;
//初始化鏈式佇列
void initqueue(linkqueue *lq)
lq->front->next = null;
}//判斷鏈式佇列是否為空
int queueempty(linkqueue lq)
else }
//將元素e入隊
int enqueue(linkqueue *lq, datatype e)
s->data = e;
s->next = null;
lq->rear->next = s;
lq->rear = s;
return 1;
}int dequeue(linkqueue *lq, datatype *e)
else
free(s);
return 1; }}
int gethead(linkqueue lq, datatype *e)
else }
void clearqueue(linkqueue *lq)
}
linkstack.h
#pragma once
#include #include using namespace std;
typedef char datatype;
typedef struct node
lstacknode,*linkstack;
void initstack(linkstack *top)
(*top)->next = null;
}int stackempty(linkstack top)
else }
int pushstack(linkstack top, datatype e)
p->data = e;
p->next = top->next;
top->next = p;
return 1;
}int popstack(linkstack top, datatype *e)
top->next = p->next;
*e = p->data;
free(p);
return 1;
}int gettop(linkstack top, datatype *e)
*e = p->data;
return 1;
}int stacklength(linkstack top)
return count;
}void destorystack(linkstack top)
}
main.cpp
#include "linkqueue.h"
#include "linkstack.h"
#include #include #include typedef char datatype;
void printstackqueue(linkstack lstack,linkqueue lqueue);
void main()
for (i = 0; i < strlen(str2);i++)
cout << "字串行1:" << str1 << endl;
printstackqueue(lstack1, lqueue1);
cout << "字串行2:" << str2 << endl;
printstackqueue(lstack2, lqueue2);
system("pause");
}void printstackqueue(linkstack lstack, linkqueue lqueue)
} cout << "該字串行是回文!" << endl;
}
結果:
佇列的鏈式表示
主題 佇列的鏈式表示 開發環境 visual studio 開發語言 c include include include typedef int elemtype typedef enum boolean 結點 typedef struct qnode qnode,pqnode 佇列 typedef...
佇列的鏈式表示
佇列是和棧相反的一中線性結構,棧的後進先出lifo結構,而佇列是先進先出fifo結構。它只允許在表的一端進行插入,而在另一端進行刪除。1 2和棧相反,佇列是一種先進先出fifo的結構,包括隊頭front,隊尾rear 3使用鏈式結構表示佇列時,分別乙個頭指標和尾指標。為操作方便,鏈佇列也有乙個頭結點...
鏈式結構表示佇列
define qdatatype int typedef struct qlistnode qnode 佇列的結構 typedef struct queue queue 初始化佇列 void queueinit queue q 隊尾入佇列 void queuepush queue q,qdataty...