| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 916 人关注过本帖
标题:严蔚敏 吴伟明 数据结构 C链队列实现
只看楼主 加入收藏
jaq1318707
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-4-21
收藏
 问题点数:0 回复次数:1 
严蔚敏 吴伟明 数据结构 C链队列实现
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
/*jiang*/
typedef struct qnode{
    int data;
    struct qnode *next;
}qnode,*queueptr;

typedef struct{
    queueptr front;
    queueptr rear;
}linkqueue;


void initqueue(linkqueue *q){
    q->front=q->rear=(queueptr)malloc(sizeof(qnode));
    if(!q->front) exit(-2);
    q->front->next=NULL;
}

void destroyqueue(linkqueue *q){
    while(q->front){
        q->rear=q->front->next;
        free(q->front);
        q->front=q->rear;
    }

}

void clearqueue(linkqueue *q){
    queueptr p,r;
    q->rear=q->front;
    p=q->front->next;
    q->front->next=NULL;

    while(p){
        r=p;
        p=p->next;
        free(r);
    }
}
int queueempty(linkqueue q){
    if(q.front==q.rear) return 1;
    else return 0;
}


int queuelength(linkqueue q){
    queueptr p;
    int i=0;
    p=q.front;
    while(p!=q.rear){
        i++;
        p=p->next;
    }
    return i;
}

void gethead(linkqueue q,int *e){
 queueptr p;
 if(q.front==q.rear)  return;
 p=q.front->next;
 *e=p->data;

}

void enqueue(linkqueue *q,int e){
    queueptr p;
    p=(queueptr)malloc(sizeof(qnode));
    if(!q) exit(-2);
    p->data=e;
    p->next=NULL;
    q->rear->next=p;
    q->rear=p;
}

void dequeue(linkqueue *q,int *e){
    queueptr p;
    if(q->front==q->rear) return;
    p=q->front->next;
    *e=p->data;
    q->front->next=p->next;
    if(p==q->rear)  q->rear=q->front;
    free(p);
}

void queuetraverse(linkqueue q){
    queueptr p;
    p=q.front->next;
    printf("----------------------\n");
    printf("data in queue:");
    while(p){
        printf("%2d",p->data);
        p=p->next;
    }
    printf("\n");
    printf("----------------------\n");
}
main(){
    linkqueue q;
    int i,e;
    initqueue(&q);
    printf("empty or not?(true:1,false :0)%2d\n",queueempty(q));
    for(i=0;i<7;i++){
        enqueue(&q,i);
    }
    queuetraverse(q);
    printf("empty or not?(true:1,false :0)%2d\n",queueempty(q));
    printf("insert data e:");
    scanf("%d",&e);
    enqueue(&q,e);
    queuetraverse(q);
    printf("length of queue:%2d\n",queuelength(q));
    printf("after delete data:");
    dequeue(&q,&e);
    printf("the delete num:%2d\n",e);
    queuetraverse(q);
    gethead(q,&e);
    printf("data of head qnode :%2d\n",e);
    printf("after clear:\n");
    clearqueue(&q);
    printf("empty or not?(true:1,false :0)%2d\n",queueempty(q));
    printf("length of queue:%2d\n",queuelength(q));
    destroyqueue(&q);


}
搜索更多相关主题的帖子: 严蔚敏 数据结构 吴伟明 队列 
2010-05-14 11:57
jaq1318707
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-4-21
收藏
得分:0 
多看书,少泡在网上。学东西就要扎扎实实来。不来论坛啦。挺要时间的。
2010-05-14 12:49
快速回复:严蔚敏 吴伟明 数据结构 C链队列实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014889 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved