数据结构(c语言版)队列基本操作的实现

【实验内容】
1、 编程实现26个英文字母的顺序队和链队存储;
2、 要求先把“A~Z”26个英文字母入队,然后让所有字母出队;
3、 要求采用结构化编程,用init( )函数实现队列的初始化,用EnQueue( )函数实现入队,用OutQueue( )函数实现出队,build( )函数建立队列,display( )函数显示队列。
请把“自己填写”的部分补上去,感激不尽

第1个回答  推荐于2016-03-29
/***************/
/* 链式队列 */
/***************/
#include "stdlib.h"
#include "stdio.h"

/* 定义链式队列类型 */
typedef int ElemType;
typedef struct QNode
{ ElemType data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct
{ QueuePtr front;
QueuePtr rear;
} LinkQueue;

/* 1、初始化链式队列 */
void InitQueue(LinkQueue *Q)
{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
if (!(Q->front)) exit(0);
Q->front->next=NULL; }

/* 2、销毁链式队列 */
void DestroyQueue(LinkQueue *Q)
{ while (Q->front)
{ Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear; }
}

/* 3、清空链式队列 */
void ClearQueue(LinkQueue *Q)
{ QueuePtr p;
p=Q->front->next;
while (p)
{ Q->front->next=p->next;
free(p); }
Q->rear=Q->front;
}

/* 4、判断空队列 */
int QueueEmpty(LinkQueue Q)
{ if (Q.front==Q.rear)
return 1;
else
return 0; }

/* 5、求链式队列长度 */
int QueueLength(LinkQueue Q)
{ QueuePtr p; int n=0;
p=Q.front;
while (p!=Q.rear)
{ n++; p=p->next; }
return n;
}

/* 6、取队头元素 */
ElemType GetHead(LinkQueue Q)
{ if (Q.front!=Q.rear)
return Q.front->next->data;
}

/* 7、入队列 */
void EnQueue(LinkQueue *Q, ElemType e)
{ QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if (!p) exit(0);
p->data=e; p->next=NULL;
Q->rear->next=p;
Q->rear=p; }

/* 8、出队列 */
void DeQueue(LinkQueue *Q, ElemType *e)
{ QueuePtr p;
if (Q->front!=Q->rear)
{ p=Q->front->next;
*e=p->data;
Q->front->next=p->next;
if (Q->rear==p) Q->rear=Q->front;
free(p); }
}

/* 9、遍历链式队列并输出元素 */
void QueueTraverse(LinkQueue Q)
{ QueuePtr p;
printf("\nQueue: ");
p=Q.front->next;
while (p)
{ printf("%d\t",p->data);
p=p->next;}
}

/* 约瑟夫问题 */
void Joseffer(int n)
{ LinkQueue Q; int i; ElemType x;
InitQueue(&Q);
for(i=1; i<=n; i++)
EnQueue(&Q,i);
while (!QueueEmpty(Q))
{ for(i=1; i<=3; i++)
{ DeQueue(&Q,&x);
if (i!=3)
EnQueue(&Q,x);
else
printf("%5d",x);
}
}
}

/* 主函数 */
main()
{ LinkQueue Q; int i; ElemType x;
InitQueue(&Q);
for(i=2; i<=5; i++)
EnQueue(&Q,i);
printf("len:%d\n",QueueLength(Q));
while (!QueueEmpty(Q))
{ DeQueue(&Q,&x);
printf("%d\t",x); }
//QueueTraverse(Q);
//Joseffer(6);
}

自己去调试吧,这个是C语言版的链式队列,如果看不懂或者调不出来就去看书吧。否则你这门是白学了。
注:这里是链式队列

/***************/
/* 循环队列 */
/***************/
#include "stdlib.h"
#include "stdio.h"
#define N 100

/* 定义循环队列类型 */
typedef int ElemType;
typedef struct
{ ElemType *base;
int front;
int rear;
} SqQueue;

/* 1、初始化循环队列 */
void InitQueue(SqQueue *Q)
{ Q->base=(ElemType*)malloc(N*sizeof(ElemType));
Q->front=Q->rear=0; }

/* 2、销毁循环队列 */
void DestroyQueue(SqQueue *Q)
{ free(Q->base); }

/* 3、清空循环队列 */
void ClearQueue(SqQueue *Q)
{ Q->front=Q->rear=0; }

/* 4、判断空队列 */
int QueueEmpty(SqQueue Q)
{ if (Q.front==Q.rear)
return 1;
else
return 0; }

/* 5、求循环队列长度 */
int QueueLength(SqQueue Q)
{ return (Q.rear+N-Q.front)%N; }

/* 6、取队头元素 */
void GetHead(SqQueue Q, ElemType *e)
{ if (Q.front!=Q.rear)
*e=Q.base[Q.front];
}

/* 7、入队列 */
int EnQueue(SqQueue *Q, ElemType e)
{ if ((Q->rear+1)%N==Q->front)
return 0;
Q->base[Q->rear]=e;
Q->rear=(Q->rear+1)%N;
return 1; }

/* 8、出队列 */
int DeQueue(SqQueue *Q, ElemType *e)
{ if (Q->front==Q->rear)
return 0;
*e=Q->base[Q->front];
Q->front=(Q->front+1)%N;
return 1; }

/* 9、遍历循环队列并输出元素 */
void QueueTraverse(SqQueue Q)
{ int i;
printf("\nQueue: ");
if (Q.rear<Q.front) Q.rear=Q.rear+N;
for(i=Q.front; i<Q.rear; i++)
printf("%d\t",Q.base[i%N]); }

/* 主函数 */
main()
{ SqQueue Q; int i; ElemType x;
InitQueue(&Q);
for(i=2; i<=5; i++)
EnQueue(&Q,i);
printf("len:%d\n",QueueLength(Q));
while (!QueueEmpty(Q))
{ DeQueue(&Q,&x);
printf("%d\t",x); }
QueueTraverse(Q);
}

在给你个循环队列吧
第2个回答  2010-06-06
0.0本回答被提问者采纳

用C语言编写队列的各种基本操作,我不是非常明白:注释里有些问题:请大家...
进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 在队列这种数据结构中,最先插入在元素将是最先被删除;反之最后插入的元素将最后被删除,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。 队列空的条件:front=rear 队列满的条...

数据结构C语言描述的链队列的基本操作(初始化,判空,入队,出队,取对头...
return 1;} \/\/取队头 输出队列所有数就是出队

c语言队列操作
pq->rear->next = pnew这个代码从队列的尾部增加新节点,然后pq->rear = pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的...

北京理工计算机专业考研考什么
什么是数据结构,基本概念和术语,数据抽象和面向对象程序设计,算法的描述和算法分析,算法的时间复杂度和空间复杂度分析。②线性表。线性表的逻辑结构和基本操作,线性表的顺序存储结构,线性表的链式存储结构,线性表的简单应用与实现。③栈和队列。栈的特性和基本操作,栈的简单应用与实现。队列的特性和基本操作,队列的简...

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

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

学数据结构用什么书好
《数据结构C语言版》这本书,以C语言为载体,详细阐述了数据结构的理论知识和应用实例。它从数据结构的基本概念入手,逐步深入到各种数据结构如线性表、栈、队列、树、图等的设计与实现,同时结合具体的算法实例进行讲解。通过这本书的学习,读者能够掌握数据结构的原理、特点以及在实际编程中的应用方法,...

数据结构(C语言版)的中国铁道出版社出版图书
书名:数据结构(C语言版)套系名称:高职高专计算机实用教程系列规划教材书号:978-7-113-12943-9 版次:1-1 开本:16开 页码:236页作者:王桂芝出版时间:2011-08-01定价:24 元出版社:中国铁道出版社适用专业:计算机专业 本书重点讨论了各种基本数据结构的类型描述、常用算法实现及其应用。全书...

C语言的数据结构是什么
栈和队列是特殊的线性数据结构,分别支持后进先出(LIFO)和先进先出(FIFO)的访问方式。树和图是更复杂的数据结构,用于表示具有层次关系或复杂连接的数据。在C语言中,通过结构体、数组、指针等概念实现数据结构。例如,链表可以通过定义结构体节点并使用指针连接节点来实现。数组则直接在内存中连续存储...

谁有《数据结构》(C语言版)严蔚敏,清华大学2005年的课本?麻烦把目录告 ...
数据结构(C语言版)严蔚敏 清华大学出版社 目录 第1章 绪论 1.1 什么是数据结构 1.2 基本概念和术语 1.3 抽象数据类型的表现与实现 1.4 算法和算法分析 第2章 线性表 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示及相加 第3章 ...

相似回答