注册 登录
编程论坛 数据结构与算法

假设以循环链表表示队列,并且只设一个指针指向队尾元素结点而不设头指针

LiuFuMinH 发布于 2013-11-04 11:31, 926 次点击
打印判断入队都没问题   但是但运行出队的时候就出现错误
求指点


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<windows.h>
#define TRUE  1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;

typedef struct LNode {
ElemType data;
struct LNode *next;
struct LNode *rear;
}LNode, *LinkList;
//基本操作

Status InitLinkList(LinkList &L)         //队列初始化
{
L=(LinkList)malloc(sizeof(LNode));
L->data=NULL;
L->next=L;
L->rear=L;
return 0;
}

Status Liststatus(LinkList L){  //判断队列状态
LinkList p;
p=L->rear->next;
int i=1;
if(L->data==NULL)
printf("队空\n");
else {
    while(!(L->rear==p))
{i++;p=p->next;}
printf("队列中有%d个元素\n",i);
return OK;
 }
}


Status Listpush(LinkList &L,ElemType e){               //入队
LinkList s;

if(L->data==NULL)
L->data=e;
else{
    s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=L->rear->next;
L->rear->next=s;
}
return OK;
}


Status dequeue(LinkList &L){         //出队
LinkList s;

if(L->data==NULL)
return ERROR;
if(L->rear->next==L->rear)
L->data==NULL;
while(!(L->next==L->rear)){L=L->next;}
s=L->rear;
L->rear=L;
L->next=s->next;
free(s);
return OK;
}


Status ListPrint(LinkList L) {                     //打印

LinkList p;
p=L->rear->next;
int i=1;
if(L->data==NULL)
printf("队空\n");
else {
    while(!(L->rear==p))
{printf("%d  ",p->data);p=p->next;}
printf("%d\n",p->data);
return OK;   

}
}

void main(){
Status InitLinkList(LinkList &L);
Status Liststatus(LinkList L);
Status Listpush(LinkList &L,ElemType e);
Status dequeue(LinkList &L);
Status ListPrint(LinkList L);
LinkList L;
InitLinkList(L);
Listpush(L,5);Listpush(L,7);Listpush(L,3);Listpush(L,8);Listpush(L,55);
Liststatus(L);
ListPrint(L);

dequeue(L);
dequeue(L);
dequeue(L);
Liststatus(L);
ListPrint(L);

dequeue(L);
dequeue(L);
Liststatus(L);
}
1 回复
#2
LiuFuMinH2013-11-04 18:49
求大神指点呀
1