要求:利用栈和队列实现对回文数序列的判断,要求形式如下:abb&bba#。以#作为结束符号,并且形式为序列a&序列b。*
本文使用C语言。
队列头文件如下:
#include <stdlib.h>
#include <stdio.h>
typedef char DataType;//定义数据类型
/*定义队列结点结构*/
typedef struct QueueNode {
DataType data;
struct QueueNode* next;
} QueueNode;
/*定义链表队列指针*/
typedef struct LqueuePointer {
QueueNode* front;
QueueNode* rear;
} LqueuePointer;
/*将队首和队尾的指针的指针作为链式队列的标志*/
typedef LqueuePointer* Lqueue;
/*函数功能:建立一个链式队列
入口参数:void
出口参数:Lqueue q*/
Lqueue InitLqueue() {
LqueuePointer* q = (LqueuePointer*)malloc(sizeof(LqueuePointer));
if (q == NULL) {
printf("create a link queue failed");
} else {
q->front = NULL;
q->rear = NULL;
}
return q;
}
/*函数功能:判断链式队列是否为空
入口参数:Lqueue q
出口参数:int i */
int IsEmptyLqueue(Lqueue q) {
return (q->front == NULL);
}
/*函数功能:在链式队列首部插入字符
入口参数:Lqueue q,DataType x
出口参数:null*/
void enterLqueue(DataType x, Lqueue q) {
QueueNode* a = (QueueNode*)malloc(sizeof(QueueNode));
if (a == NULL) {
printf("create a link queue node failed");
} else {
a->data = x;
a->next = NULL;
if (IsEmptyLqueue(q)) {
q->front = a;
q->rear = a;
} else {
q->rear->next = a;
q->rear = a;
}
}
}
/*函数功能:在链式队列尾部插入字符f
入口参数:Lqueue q
出口参数:DataType f*/
DataType deleteLqueue(Lqueue q) {
DataType f;
if (IsEmptyLqueue(q))