链队列——队列的链式表示与实现
2013-07-27 19:27
381 查看
//链队列——队列的链式表示与实现 #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR -1 #define OVERFLOW 0 typedef struct QNode{ int data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front;//队头指针 QueuePtr rear;//队尾指针 }LinkQueue;//整个队列结构体 int InitQueue(LinkQueue &Q){ //构造一个空队列 Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));//QueuePtr是结构体指针,长度是sizeof(QNode) if(!Q.front) exit(OVERFLOW); Q.front->next = NULL;//Q.front和Q.rear是同一地址,所以Q.rear->next也为空 return OK; } //如果主函数中写为InitQueue(&Q),则可用以下形式 //int InitQueue(LinkQueue *Q){ // //构造一个空队列 // (*Q).front = (*Q).rear = (QueuePtr)malloc(sizeof(QNode));//QueuePtr是结构体指针,长度是sizeof(QNode) // if(!(*Q).front) exit(OVERFLOW); //其中 (*Q).front为简便起见也可以写为Q->front // (*Q).front->next = NULL; //} int EnQueue(LinkQueue &Q,int num){ //跟上面对照,&Q,这种写法,是引用 //插入元素e为Q的新的队尾元素 QueuePtr p; int e; for(int i=0;i<num;i++) { scanf("%d",&e); p = (QueuePtr)malloc(sizeof(QNode));//定义结点用p来定义,因为QueuePtr含有数据和指针,然后把指针和rear,front进行处理。 if(!p) exit(OVERFLOW); //注:rear和front也是结构体指针,也包含data和next p->data = e; p->next = NULL; /* if(Q.rear==NULL) Q.rear = Q.front->next = p;//其中的if可以不加,因为刚开始时 Q.front = Q.rear,它们是同一地址。所以当给Q.rear->next赋值时,Q.front->next自动有值了 else { Q.rear->next = p; Q.rear = p; } */ Q.rear->next = p; Q.rear = p; } return OK; } int DeQueue(LinkQueue &Q,int &e){ //若队列不空,则删除Q的队头元素,用e返回其值,并返回OK QueuePtr p; //Q.front->next = Q.rear; if(Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data; //printf("%d",e); //getchar(); Q.front->next = p->next; if(Q.rear == p ) Q.rear = Q.front; free(p); return OK; } void print(LinkQueue &Q){//将线性表中的值打印出来 QueuePtr p; p = Q.front->next; while(p != NULL) { printf("%d\n",p->data); p = p->next; } } int DestroyQueue(LinkQueue &Q){ while(Q.front) { Q.rear = Q.front->next; free(Q.front); Q.front = Q.rear; } return OK; } int main() { int num = 3; int e; LinkQueue Q; InitQueue(Q); EnQueue(Q,num); /*for(int i=0;i<num;i++) { DeQueue(Q,e); printf("%d\n",e); }*/ print(Q); DestroyQueue(Q); system("pause"); return OK; }
相关文章推荐
- 队列的链式表示和实现
- 数据结构(6): 链队——队列的链式表示和实现
- 链队列---队列的链式表示和实现
- 队列的链式表示与实现
- 队列的链式表示与实现
- C语言 队列的链式结构的实现与表示 数据结构 队列的实现与表示
- 3.5.3链队——队列的链式表示和实现
- 队列的链式表示和实现
- 队列的链式表示和实现----单链队列
- 链队列——队列的链式表示和实现
- 数据结构之队列的链式表示及其实现
- 链队列--队列的链式表示和实现
- 链队列——队列的链式表示和实现
- 数据结构(C语言版)---第三章栈和队列 3.4.2 队列的链式表示和实现(循环队列)
- 队列在Java类库中的链式表示及实现——LinkedList
- C_栈和队列(ADT)-队列的链式表示和实现
- 链式队列的表示和实现
- 队列的链式表示和实现(数据结构)
- 数据结构之队列的链式表示和实现
- 数据结构---C语言之队列的链式表示和实现(链队列)