链队列的c语言实现

#include<stdio.h>

#include<stdlib.h>

#define QUEUE_MAX_SIZE 100

typedef int Status;

typedef int QElemtype;

typedef struct QNode{

QElemtype data;

struct QNode *next;

}*QueuePtr;

typedef struct{

QueuePtr front;

QueuePtr rear;

}LinkQueue;

Status InitQueue(LinkQueue &Q){

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));

if(!Q.front) return 0;

Q.front->next=NULL;

return 1;

}

Status DestoryQueue(LinkQueue &Q){

while(Q.front){

Q.rear=Q.front->next;

free(Q.front);

Q.front=Q.rear;

}

return 1;

}

Status ClearQueue(LinkQueue &Q){

while(Q.front){

Q.rear=Q.front->next;

Q.front->data=NULL;

Q.front=Q.rear;

}

return 1;

}

Status IsQueueEmpty(LinkQueue &Q){

if(Q.front==Q.rear)return 1;

return 0;

}

Status QueueLength(LinkQueue &Q){

QNode *p;

int i=0;

p=Q.front;

while(p->next){

p=p->next;

i++;

}

return i;

}

Status GetHead(LinkQueue &Q,QElemtype &e){

if(Q.front==Q.rear) return 0;

e=Q.front->next->data;

return 1;

}

Status EnQueue(LinkQueue &Q,QElemtype e){

QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));

if(!p) return 0;

p->data=e;p->next=NULL;

Q.rear->next=p;

Q.rear=p;

return 1;

}

Status DeQueue(LinkQueue &Q,QElemtype &e){

QueuePtr p;

p=Q.front->next;

if(Q.front==Q.rear) return 0;

e=p->data;

Q.front->next=p->next;

if(Q.rear==p) Q.rear=Q.front;

free(p);

return 1;

}

Status PrintQueue(LinkQueue &Q){

QNode *p;

p=Q.front;

while(p->next){

p=p->next;

printf("%d\n",p->data);

}

return 1;

}

int main(){

LinkQueue q;

InitQueue(q);

int set,isclose;

QElemtype e;

while(1){

set=0;

printf(" 1.队尾插入元素\n 2.删除队头元素并输出\n 3.输出队列的长度\n 4.销毁队列\n 5.得到队头元素 \n 6.查询该队列是否为空 \n 7.输出整个队列中的所有元素\n 8.建立队列(在销毁后重建)\n");

scanf("%d",&set);

switch(set){

case 1:printf("请输入元素\n");scanf("%d",&e);if(EnQueue(q,e)) printf("插入成功\n");else printf("插入失败\n"); break;

case 2:if(DeQueue(q,e))printf("%d\n",e);else printf("队列里无元素\n");break;

case 3:printf("%d\n",QueueLength(q));break;

case 4:if(DestoryQueue(q)) printf("销毁成功\n");break;

case 5:if(GetHead(q,e)) printf("%d\n",e);break;

case 6:if(IsQueueEmpty(q)) printf("队列为空\n"); else printf("队列不为空\n");break;

case 7:PrintQueue(q);break;

case 8:if(InitQueue(q));printf("建立成功\n");break;

}

printf("结束输入0\n");

scanf("%d",&isclose);

if(!isclose) break;

}

return 0;

}

时间: 2024-12-07 13:12:54

链队列的c语言实现的相关文章

C语言 链队列基本操作

C语言链队列基本操作 #include <stdio.h> #include <stdlib.h> #include <malloc.h> /* C语言链队列基本操作 2014年7月11日10:11:41 */ typedef int qType; typedef struct node { qType data; struct node *pNext; }Node,*pNode; typedef struct queue { pNode front; pNode re

链队列-C语言版

源文件部分: 指针没学好的同学很难看懂^_^,有点乱,希望对大家有点帮助. #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> typedef int Elemtype; #include"LQueue.h" int main() { Deque head; instruction(head); return 0; } 头文件部分: type

数据结构 - 链队列的实行(C语言)

数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示. 空队列时,front和rear都指向头结点,如下图所示. 链队列的结构为: typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode /* 结点结构 */ { QElemTy

链队列代码及应用

链队列代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; typedef struct Qnode{ int

链栈和链队列的类实现

#include<iostream>#include<cassert> using namespace std; template <class T>//链栈 struct LinkNode{T data;LinkNode<T> *Link;LinkNode(LinkNode<T> *pr=NULL){Link=pr;}LinkNode(const T& item,LinkNode<T> *pr=NULL){data=item

09.循环队列与链队列

一.队列与循环队列 1.队列 (1)队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.队列是一种先进先出(Fiirst In First Out)的线性表,简称FIFO.允许插入的一端称为队尾,允许删除的一端称为队头. 从队列的定义可知,队列的入队操作,其实就是在队尾追加一个元素,不需要移动任何元素,因此时间复杂度为O(1).队列的删除操作,与栈不同的是,队列元素的出列是在队头,即小标为0的位置,若要删除一个元素的话,需要移动队列的所有元素,因此事件复杂度为O(n).

数据结构(C实现)------- 链队列

链队列,即队列的链式存储结构,它是仅在表头删除和表尾插入的单链表,因此一个链队列需要设置两个分别指示队头元素和队尾元素的指针,为了操作方便,给链队列添加一个头结点,并令队头指针指向头结点,由此,空的链队列的判断条件就是队头指针和队尾指针均指向头结点. 链队列的类型描述: //链队列类型描述 typedef int QElemType; typedef struct node{ QElemType data; struct node *next; }QNode,*QueuePtr; typedef

数据结构(二):链表、链队列

上一篇博文中主要总结线性表的顺序存储结构实现.比方顺序表.顺序队列和顺序栈.详细能够參考上篇博文 http://blog.csdn.net/lg1259156776/article/details/46993591 以下要进行学习和总结的是线性表的链式存储结构实现,比方链表和链队列. 顺序存储结构的优缺点 长处是逻辑相邻,物理相邻,可随机存取任一元素,存储空间使用紧凑:缺点是插入.删除操作须要移动大量的元素.平均移动n/2,预先分配空间需依照最大空间分配.利用不充分(C++ STL模板库中实现的

链栈的c语言实现

1.链栈结构 typedef struct StackNode { SElemType data; struct StackNode *next; }StackNode,*LinkStackPtr; typedef struct { LinkStackPtr top; int count; }LinkStack; 2.构造一个空栈S Status InitStack(LinkStack *S) { S->top = (LinkStackPtr)malloc(sizeof(StackNode));