|  | 
 
| 
本帖最后由 小jy2333 于 2020-11-6 23:11 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 这是题目要求:编程序判断一个字符序列是否是回文,要求采用链式队列和链式堆栈。
 算法提示:设字符数组str中存放了要判断的字符串。把字符数组中的字符逐个分别存入队列和堆栈,然后逐个出队列和退栈并比较出队列的字符和退栈的字符是否相等,若全部相等则该字符序列是回文,否则就不是回文。
 下面是我写的未完成的代码,到了insertq函数关于队列插入的地方卡主了
 
 复制代码#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef char datatype;
typedef struct node1 {
        datatype data;
        struct node1 *next;
} linkstack;
linkstack *hs;
typedef struct node2 {
        datatype data;
        struct node2 *next;
} linkqueue;
typedef struct {
        linkqueue *front,*rear;
} lqueue;
lqueue *hq;
void push(datatype x) {
        linkstack *s;
        s=malloc(sizeof(linkstack));
        s->data=x;
        s->next=hs;
        hs=s;
}
void pop() {
        linkstack *p;
        if(hs==NULL)
                printf("栈空");
        else {
                p=hs;
                hs=hs->next;
        }
}
void insertq(datatype x) {
        linkqueue *p;
        p=malloc(sizeof(linkqueue));
        p->data=x;
        p->next=NULL;
        if(hq->rear==NULL) {
                hq->front=p;
                hq->rear=p;
        } else {
                hq->rear->next=p;
                hq->rear=p;
        }
}
void deleteq() {
        linkqueue *p;
        if(hq->front==NULL)
                printf("队空");
        else {
                p=hq->front;
                hq->front=p->next;
                if(hq->front==NULL)
                        hq->rear=hq->front;
        }
}
void print1(head)
linkstack *head;
{
        linkstack *p;
        p=head;
        while(p!=NULL) {
                printf("%c      ",p->data);
                p=p->next;
        }
        printf("\n");
}
int main() {
        char str[]="abcdefrx";
        char m='a';
        int i=0;
        while(*(str+i)) {
                push(str[i]);
                i++;
        }
        print1(hs);
        pop(hs);
        print1(hs);
        insertq(m);
}
 运行结果经过测试发现可能就是错在insertq,不明白错在哪里,求好心人帮忙解答一下
 | 
 |