| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1112 人关注过本帖
标题:高手帮忙看下代码问题出在哪里?(优先级队列问题)
只看楼主 加入收藏
看我来C
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-3-4
结帖率:100%
收藏
 问题点数:0 回复次数:3 
高手帮忙看下代码问题出在哪里?(优先级队列问题)
头文件SeqPQueue.h

typedef struct
{
    int priority;
    ElemType elem;
}DataType;

typedef struct
{
    DataType queue[MaxQueueSize];
    int size;
}SeqPQueue;

void QueueInitiate(SeqPQueue *Q)
{
    Q->size=0;
}

int QueueNotEmpty(SeqPQueue Q)
{
    if(Q->size<=0)return 0;
    else return 1;
}
int QueueAppend(SeqPQueue *Q,DataType x)
{
    if(Q->size>=MaxQueueSize)
        printf("队列已满,无法插入!\n");
    return 0;
}
else
{
    Q->queue[Q->size]=x;
    Q->size ++;
    return 1;
}
}

int QueueDelete(SeqPQueue *Q,DataType *d)
{
    DataType min;
    int minIndex,i;

    if(Q->size<=0)
    {
        printf("队列空,无数据元素出队列!");
        return 0;
    }
    else
    {
        min=Q->queue[0];
        minIndex=0;
        for(i=1;i<Q->size;i++)
            if(Q->queue[i].priority<min.priority)
            {
                min=Q->queue[i];
                minIndex=i;
            }
            *d=Q->queue[minIndex];
            for(i=minIndex+1;i<Q->size;i++)
                Q->queue[i-1]=Q->queue[i];
            Q->size--;
            return 1;
    }
}

int QueueGet(SeqPQueue *Q,DataType *d)
{
    DataType min;
    int minIndex,i;
    if(Q->size<=0)
    {
        printf("队列以空,无数据元素可取!\n");
        return 0;
    }
    else
    {
        min=Q->queue[0];
        minIndex=0;
        for(i=1;i<Q->size;i++)
            if(Q->queue[i].priority<min.priority)
            {
                min=Q->queue[i];
                minIndex=i;
            }

                *d=Q->queue[minIndex];
                return 1;
    }
}





#include<stdio.h>
#include<stdlib.h>


#define MaxQueueSize 100
typedef int ElemType;
#include"SeqPQueue.h"


void main(void)
{
    SeqPQueue myPQueue;
    FILE *fp;
    DataType task;
    int i;

    if((fp=fopen("task.dat","r"))==NULL)
    {
        printf("不能打开文件task.dat!");
        exit(0);
    }



    QueueInitiate(&myPQueue);
    while(!feof(fp))
    {
        fscanf("fp,"%d %d",&task.elem,&task.priority);
            QueueAppend(&mePQueue,task);
    }

    i=1;
    printf("序号  任务号  优先级\n");
    while(QueueNotEmpty(myPQueue))
    {
        QueueDelete(&myPQueue,&task);
        printf("%d    ",i);
        printf("%d    ",task.elem);
        printf("%d   \n",task.priority);
        i++;
    }
}

    编译器提示出了N多问题.....请教下为什么会这样??
搜索更多相关主题的帖子: 队列 代码 
2008-09-22 21:36
shezhanxi
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-5-2
收藏
得分:0 
编成习惯问题
SeqPQueue.h
-------------------------------------
typedef struct
{
    int priority;
    ElemType elem;
}DataType;

typedef struct
{
    DataType queue[MaxQueueSize];
    int size;
}SeqPQueue;

void QueueInitiate(SeqPQueue *Q)
{
    Q->size=0;
}

int QueueNotEmpty(SeqPQueue Q)
{
    if(Q.size<=0)return 0;
    else return 1;
}
int QueueAppend(SeqPQueue *Q,DataType x)
{
    if(Q->size>=MaxQueueSize)
    {        printf("队列已满,无法插入!\n");
    return 0;
    }
    else
    {
    Q->queue[Q->size]=x;
    Q->size ++;
    return 1;
    }
}

int QueueDelete(SeqPQueue *Q,DataType *d)
{
    DataType min;
    int minIndex,i;

    if(Q->size<=0)
    {
        printf("队列空,无数据元素出队列!");
        return 0;
    }
    else
    {
        min=Q->queue[0];
        minIndex=0;
        for(i=1;i<Q->size;i++)
            if(Q->queue[i].priority<min.priority)
            {
                min=Q->queue[i];
                minIndex=i;
            }
            *d=Q->queue[minIndex];
            for(i=minIndex+1;i<Q->size;i++)
                Q->queue[i-1]=Q->queue[i];
            Q->size--;
            return 1;
    }
}

int QueueGet(SeqPQueue *Q,DataType *d)
{
    DataType min;
    int minIndex,i;
    if(Q->size<=0)
    {
        printf("队列以空,无数据元素可取!\n");
        return 0;
    }
    else
    {
        min=Q->queue[0];
        minIndex=0;
        for(i=1;i<Q->size;i++)
            if(Q->queue[i].priority<min.priority)
            {
                min=Q->queue[i];
                minIndex=i;
            }

                *d=Q->queue[minIndex];
                return 1;
    }
}
--------------
main.c
-----------------------------------
#include<stdio.h>
#include<stdlib.h>


#define MaxQueueSize 100
typedef int ElemType;
#include"SeqPQueue.h"


void main(void)
{
    SeqPQueue myPQueue;
    FILE *fp;
    DataType task;
    int i;

    if((fp=fopen("task.dat","r"))==NULL)
    {
        printf("不能打开文件task.dat!");
        exit(0);
    }



    QueueInitiate(&myPQueue);
    while(!feof(fp))
    {
        fscanf(fp,"%d %d",&task.elem,&task.priority);
            QueueAppend(&myPQueue,task);
    }

    i=1;
    printf("序号  任务号  优先级\n");
    while(QueueNotEmpty(myPQueue))
    {
        QueueDelete(&myPQueue,&task);
        printf("%d    ",i);
        printf("%d    ",task.elem);
        printf("%d   \n",task.priority);
        i++;
    }
}
2008-09-22 23:12
看我来C
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2008-3-4
收藏
得分:0 
请问要怎么改才行啊???你改动过了么??没发现啊....
2008-09-23 19:46
情非得已
Rank: 1
等 级:新手上路
帖 子:59
专家分:5
注 册:2011-4-23
收藏
得分:0 
就是啊 怎么还有错误 我也找不出来
2011-04-25 21:27
快速回复:高手帮忙看下代码问题出在哪里?(优先级队列问题)
数据加载中...
 
   



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

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