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

链式队列设计。要求:
(1) 以带头结点的单循环链表实现,并只设尾指针,不设头指针。
(2) 编写实现这种链式队列的初始化、入队列、出队列、取元素、判断非空函数;
(3) 设计一个主函数进行测试。
可发我邮箱726873272@qq.com 急求

#include <stdio.h>
#include <stdlib.h>
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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-19
Never_S

关于数据结构算法,谁能帮我用C语言写下?谢谢
}QNode,*QueuePtr;typedef struct \/* 队列的链表结构 *\/ { QueuePtr front,rear; \/* 队头、队尾指针 *\/ }LinkQueue;Status visit(QElemType c){ printf("%d ",c);return OK;} \/* 构造一个空队列Q *\/ Status InitQueue(LinkQueue *Q){ Q->front=Q->rear=(QueuePtr)malloc(sizeof(...

...分析、链式存储队列的基本C语言结构体分析与定义
链式队列中结点的结构体可定义如下:typedef struct qnode { DataType datal;Struct qnode *next;}LQNode;为了方便参数调用,通常把链式队列的队头指针front和队尾指针rear也定义为如下的结构体类型LQueue:typedef struct { LQNode *front;LQNode *rear;}LQueue;链式队列操作的实现 (1) 初始化...

数据结构—队列
链队是指采用链式存储结构实现的队列。通常链队用单链表来表示,一个链队显然需要两个分别指示对头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。为了操作方便,同线性表的单链表一样,为链队添加头结点,并规定头指针始终指向头结点。链队列存储结构表示如下:链队操作即为单链表插入和删除操作...

数据结构c语言怎么运行啊
首先要确定你想采用线性表的顺序存储结构还是链式存储结构。以顺序存储结构为例:include <stdio.h> include <stdlib.h> define ERROR 0 define OK 1 typedef int Status;typedef int ElemType;\/\/顺序表测试用 const int MaxSize=100; \/\/100只是示例性的数据,可以根据实际问题具体定义 const int...

c语言队列操作
= pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加\/删除 按先进先出特点的一种...

数据结构与算法-队列
看完下面队列C语言实现,相信你会多少有些了解 队列只支持两个基本操作:入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。队列跟栈一样,也是一种操作受限的线性表数据结构。队列跟栈一样,也是一种抽象的数据结构。它具有先进先出的特性,支持在队尾插入元素,在队头...

数据结构—队列(Queue)的原理以及Java实现案例
数据结构—队列(Queue)的原理以及Java实现案例队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。本文详细介绍了队列的特性,并且使用Java语言分别实现了基于顺序结构和链式结构的队列。1

数据结构的问题:C语言链式队列中这样的Q->rear->next=p;表达有错误吗...
没问题吧. q->rear就是QueuePtr 类型的, QueuePtr类型自然可以 ->next拉

链式队列有什么特点?
1. 带链的队列,当带链的队列为空时,队首指针(front)和队尾指针(rear)都指向NULL。2. 插入第一个元素时,队尾指针(rear)后移一位,指向新的队尾元素,队首指针(front)也后移一位,指向新的队首元素。3. 插入第二个元素时,队尾指针(rear)再次后移一位,指向新的队尾元素,而队...

数据结构 顺序队列和链式队列的区别
顺序队列顾名思义就是顺序存储的队列,一般在数组上实现,为避免假溢出,多采用循环的方式来管理顺序队列 链式队列自然是用链表来存储的队列,没有空间溢出的问题

相似回答