数据结构——链式队列,,,,用C语言实现

2024-12-23 06:02:53
推荐回答(2个)
回答1:

#include
#include
struct node
{
int data;
struct node *next;
};
typedef struct node Node;
int ifnull(Node *tail)
{
if(tail->next==NULL)
return 0;
return 1;
}
Node *qinit(Node *tail)
{
tail=(Node *)malloc(sizeof(Node));
tail->data=0;
tail->next=NULL;
return tail;
}
void push(Node *tail,int data)
{
if(tail==NULL)
{
perror("error!");
return;
}
Node *tmp=NULL;
if(ifnull(tail)==0)
tmp=tail;
else
tmp=(Node *)malloc(sizeof(Node));
tmp->data=data;
tmp->next=tail->next;
tail->next=tmp;
tail=tmp;
}
void pop(Node *tail)
{
if(tail==NULL)
{
perror("error!");
return;
}
if(ifnull(tail)==0)
printf("queue is empty!");
if(tail->next==tail)
{
free(tail);
tail=NULL;
return;
}
Node *tmp=tail->next;
while(1)
{
if(tmp->next==tail)
{
Node *n=tail;
tail=tmp;
tail->next=n->next;
free(n);
break;
}
tmp=tmp->next;
}
}
Node *getdata(Node *tail,int *data)
{
if(tail==NULL)
{
perror("error!");
return;
}
if(ifnull(tail)==0)
{
printf("queue is empty!");
return;
}
if(tail->next==tail)
{
*data=tail->data;
tail->data=0;
tail->next=NULL;
return tail;
}
Node *tmp=tail->next;
while(1)
{
if(tmp->next==tail)
{
Node *n=tail->next;
*data=tail->data;
free(tail);
tail=tmp;
tail->next=n;
break;
}
tmp=tmp->next;
}
return tail;
}

int main()
{
Node *tail=NULL;
tail=qinit(tail);
if(ifnull(tail))
printf("not null\n");
else
printf("is null\n");
int a[10]={0};
int i=1;
for(i=1;i<=10;i++)
push(tail,i);
for(i=0;i<10;i++)
{
tail=getdata(tail,&a[i]);
printf("%d,",a[i]);
}
printf("\n");
free(tail);
return 0;
}

回答2:

Never_S