已经改好了,详细说明见注释#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;
// ============= 改变的东西
// 原因,你的hq一开始只是一个指向NULL的指针,所以到56行就会出错,因为 不能对NULL访问rear。所以这里给hq分配空间
if (hq == NULL) {
hq = malloc(sizeof(lqueue));
hq->rear = hq->front = 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;
linkqueue* p; // 输出用
while(*(str+i)) {
push(str[i]);
i++;
}
print1(hs);
pop(hs);
print1(hs);
insertq(m);
// 输出测试
p = hq->rear;
printf("%c",p->data);
}
|