1( 20分 )
回文序列是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符串是否为回文序列。
int IsHuiwen( char *t)
{//判断t字符向量是否为回文,若是,返回1,否则返回0
SeqStack s;
int i , len;
char temp;
len=strlen(t); //求向量长度
for ( i=0; i<len; i++)//将一半字符入栈
Push( &s, t[i]);
for ( j=0; j<len; j++)//
{// 每弹出一个字符与相应字符比较
temp=Pop (&s);
if( temp!=t[j])
return 0 ;// 不等则返回0
}
return 1 ; // 比较完毕均相等则返回 1
}
2( 30分 )
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的初始化、入队以及出队算法。
typedef struct Node
{
char data;
struct Node *next;
} QNode; /*结点类型*/
typedef struct
{
QNode *rear;
} LinkQueue; /*队列类型*/
/*初始化队列*/
int initQueue(LinkQueue *Q)
{
Q->rear=(QNode *)malloc(sizeof(QNode));
if(Q->rear==NULL) return 0;
Q->rear->next=Q->rear;
return 1;
}
/*入队*/
int EnQueue(LinkQueue *Q, char e)
{
QNode *p,*head;
p=(QNode *)malloc(sizeof(QNode));
if(p==NULL) return 0;
head=Q->rear->next;
p->data=e;
p->next=head;
Q->rear->next=p;
Q->rear=p;
return 1;
}
/*出队*/
int DeQueue(LinkQueue *Q, char *e)
{ QNode * temp;
if(Q->rear->next==Q->rear)
return 0;
else
{ head=Q->rear->next;
temp=head->next;
*e=temp->data;
if(head->next==Q->rear)
head->next= head;
else head->next=temp->next;
free(temp);
return 1;
}
}