栈和队列练习题

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;
     }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值