(源代码见大话数据结构)线性表—队列的链式存储结构->出队&入队&建立空队列

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
#define OVERFLOW 0
typedef int Status;
typedef int QElemType;
typedef struct QNode//标识符和类型名一样不知道什么用意。。
{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;
typedef struct//这没写标识符
{
    QueuePtr front,rear;
}LinkQueue;
Status InitQueue(LinkQueue *Q);
Status EnQueue(LinkQueue *Q,QElemType e);
Status QueueTraverse(LinkQueue Q);
Status DeQueue(LinkQueue *Q,QElemType *e);
int main()
{
    LinkQueue l;
    int num;
    InitQueue(&l);
    EnQueue(&l,3333);
    QueueTraverse(l);
    printf("\n%d",DeQueue(&l,&num));
    printf("\n%d",num);
    return 0;
}
Status InitQueue(LinkQueue *Q)//不用malloc()野指针也是随便指向一个地址的,用了malloc()是也是随机分配了一个地址,不同就是地址大小确定?
{
    Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
    Q->front->next=NULL;
    Q->rear=Q->front;
    return OK;
}
Status EnQueue(LinkQueue *Q,QElemType e)
{
    QueuePtr q;
    q=(QueuePtr)malloc(sizeof(QNode));//要新建一个结点,所以sizeof()里要放QNode
    if(!q)
        exit(OVERFLOW);//我觉得这应该是正常运行程序并退出程序,你们认为这该是0还是非0?
    q->data=e;
    q->next=NULL;
    Q->rear->next=q;
    Q->rear=q;
    return OK;
}
Status QueueTraverse(LinkQueue Q)
{
    QueuePtr p;
    p=Q.front->next;
    while(p)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    return OK;
}
Status DeQueue(LinkQueue *Q,QElemType *e)
{
    if(Q->front==Q->rear)
        return ERROR;
    QueuePtr p;
    p=Q->front->next;
    *e=p->data;
    Q->front->next=p->next;
    if(Q->rear==p)
        Q->rear=Q->front;
    free(p);
    return OK;
}

实战BUG:

1.在创建空队列时没有建立新结点,导致Q->front和Q->rear成了野指针,然而,编译器并没有报错O_O

疑惑:

1.exit()OVERFLOW宏定义问题,关于exit()见http://www.cnblogs.com/laojie4321/archive/2012/03/31/2426910.html

2.关于NULL越看越懵逼了+_+如果只针对malloc()的话见这位大佬的文章最后的第九条。http://www.cnblogs.com/youxin/archive/2012/03/27/2420023.html

时间: 2024-10-10 22:58:46

(源代码见大话数据结构)线性表—队列的链式存储结构->出队&入队&建立空队列的相关文章

(源代码见大话数据结构)线性表—循环队列的顺序存储结构

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 typedef int Status; typedef int QElemType; typedef struct { QElemType data[MAXSIZE]; int front; int rear; }SqQueue; Status In

(源代码见大话数据结构)线性表—静态链表

#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 1000 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALS 0 typedef int ElemType; typedef int Status; typedef struct { ElemType data; int cur; } Component,Stati

数据结构之第二章线性表之静态链式存储

1--特点:用一维数组来描述线性表,用游标代替指针指示节点在数组中的相对位置.不设“指针”类型的高级语言中适用链表结构. 2--线性表的静态链式存储结构 ////  静态单链表.h//  单链表的静态存储//// 6 //  Copyright (c) 2014年 dashuai. All rights reserved.// #ifndef SLIST_H#define SLIST_H#include <stdio.h>#include <stdlib.h> #define MA

数据结构(四)——基于链式存储结构的线性表

数据结构(四)--基于链式存储结构的线性表 一.基于链式存储结构的线性表 1.链式存储的定义 链式存储为了表示数据元素与其直接后继元素间的逻辑关系,数据元素除了存储本身的信息外,还需要存储直接后继的信息.相连的数据元素之间在存储空间中不要求连续.链式存储的逻辑结构基于链式存储结构的线性表中,每个结点都包含数据域和指针域.数据域用于存储数据元素本身,指针域用于存储相邻结点的地址. 2.链表的定义 链表是基于链式存储结构的线性表链表的基本元素:头结点:链表中的辅助结点,包含指向第一个数据元素的指针数

数据结构:队列的链式存储结构

链队列的实现方法: 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头节点,而队尾指针指向终端节点.空队列时,front和rear都指向头节点. 注意:这里的实现是有头结点的,在队列的初始化函数中要为头结点开辟空间. 链队列的实现代码: #include <iostream> #include <stdlib.h> using namespace std; /**********************

队列的链式存储结构及实现

ref : https://blog.csdn.net/qq_29542611/article/details/78907339 队列的链式存储结构,其实就是线性表的单链表,只不过它只是尾进头出而已,我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端节点.如果 空队列时,front和rear都指向头结点. 入队操作: 在队尾添加元素,先将队尾元素的next指向添加的元素,然后将队尾指针重新指向新的队尾即可. 出队操作: 头结结点指向的结点即为队头结点,出

队列的链式存储结构(C语言实现)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define OK 1 5 #define ERR 2 6 #define TRUE 1 7 #define FALSE 0 8 9 typedef int status; //定义函数返回的状态,OK & ERR 10 typedef char datatype; //定义队列中每个元素的数据类型,这里暂定为字符型 11 12 typedef struct LinkQueue_

数据结构----线性表顺序和链式结构的使用(c)

PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写好了,java还有三个特性,封装.继承.多态.当然这里不是讲Java,这里主要是说内部结构,大家都知道数据结构有些东西是分为逻辑结构和物理结构的,物理结构有分为顺序结构和链式结构,有不懂得可以百度百科,这里主要是分享线性表的顺序结构.那么什么是线性表呢,线性表是最基本.最简单.也是最常用的一种数据结

Java数据结构系列之——队列(3):队列的链式存储结构及其实现

package queue.linkQueue; public class Node { // 数据域 Object element; // 指针域 Node next; // 头结点初始化 public Node(Node next) { this.next = next; } // 非头结点初始化 public Node(Object element, Node next) { this.element = element; this.next = next; } } ***********