用c语言进行链式队列的创建,编译链接没错,但是运行的时候程序被终止。以下是源代码和注释

Python011

用c语言进行链式队列的创建,编译链接没错,但是运行的时候程序被终止。以下是源代码和注释,第1张

自行比对这两个函数吧

void insert_link(struct linkqueue *ps,int val)//完成队列的增加。

{

    struct node * pnew=(struct node*)malloc(sizeof(struct node))//申请一个节点

    pnew->data=val//将要放入队列的值赋给节点的数据域

    pnew->next=NULL    

//  pnew=ps->rear->next//将rear指向新的节点,并将新的节点的指针域置空。

    ps->rear->next=pnew

    ps->rear=ps->rear->next

//  pnew->next=NULL

}

void traverse_link(struct linkqueue *ps)//完成队列遍历

{

    struct node *p=ps->front->next//申请一个临时指针变量,以完成队列遍历。因为头节点没有存放数据所以让指针指向front下一个节点

    while(/*p->next*/p!=NULL) { //当指针指向的节点的指针域不为空时就继续下移,并且输出本节点的数据

        printf("%d ",p->data)

        p=p->next

    }

}

C语言的链表与队列是两种不同的概念:

链表是一种数据的存储方式,其保存的数据在内存中是不连续的,采用指针对数据进行访问;

队列是一种数据结构,其特点是先进先出,后进后出;

队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。

SQQUEUE的第一个元素elemtype

*elem其实是指向了一个数组,该数组中存储着类型为elemtype的元素,然后front和rear就标识了队首和队尾元素对应的数组下标。

typedef

struct _Point{

int x,y

}Point

#defineelemtype

Point//这个elemtype可以是任意你自己定义的结构,可以是结构体,也可以是简单数据类型

elemtype

array[10]={0}//这个是队列的数据结构,在这里是一个Point数组

SQQUEUE

queue={0}

queue.elem=array//这样array中的元素就是queue中的元素了。

queue.front=queue.rear=queue.size=0