| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1139 人关注过本帖
标题:请教下这段程序错在哪?关于排序问题
只看楼主 加入收藏
ffcloudy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-25
收藏
 问题点数:0 回复次数:3 
请教下这段程序错在哪?关于排序问题
各种排序
  任务:用程序实现插入法排序、起泡法改进算法排序;
  利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
  输入的数据形式为任何一个正整数,大小不限。
  输出的形式:数字大小逐个递增的数列?





#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define NULL 0
typedef struct LNode {
int data;
int num;
struct LNode *next;
}LNode, *pLinkList;

class LinkList
{
private:
    pLinkList m_pList;
    int m_listLength;

public:
    LinkList(void);
    ~LinkList(void);
    bool InitList ();
    bool DestroyList ();
    bool ClearList();
   bool IsEmpty ();
    int GetLength ();
    bool ListAdd(int);
    bool Sort_Insert(int &count);    
    int Sort_Quick_Partition(int,int,int &count);  
    void QSort(int,int,int &count);
    void Sort_Quick(int &count);
    int GetItem(int);
     };


LinkList::LinkList()
{
    m_pList = NULL;
    m_listLength = 0;
    InitList();
}

LinkList::~LinkList()
{
    if (!DestroyList())
    {
        DestroyList();
    }
}

//初始化,分配一个头节点。
bool LinkList::InitList()
{
    

    if (!(m_pList = new LNode))
    {
        return false;
    }
    m_pList->next = NULL;
    m_pList->data=0;
    m_pList->num=0;

    return true;
}

//销毁链表。
bool LinkList::DestroyList()
{
    if (!ClearList()) {
    return false;
}

delete m_pList;

return true;
}

//判断链表是否为空。若为空,返回true,否则返回false。
bool LinkList::IsEmpty() {
if (m_pList->next == NULL) {
  return true;
}
return false;
}

//返回链表的中当前节点数。
int LinkList::GetLength() {
return m_listLength;
}

//将链表清空,释放当前所有节点。
bool LinkList::ClearList() {
if (m_pList == NULL) {
  return false;
}

LNode *pTemp = NULL;
while (m_pList->next != NULL) {
  pTemp = m_pList->next;
  m_pList->next = pTemp->next;
  delete pTemp;
}
m_listLength = 0;

return true;
}

//将position指定的节点内的数据设置为newData。
//第一个有效节点的position为1。
  bool LinkList::SetNodeData(int position, int newData,int newNum) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
  return false;
}

pTemp->data = newData;
pTemp->num = newNum;


return true;
}

//得到指定位置节点的数据。
//节点索引从1到listLength。
bool LinkList::GetNodeData(int position, int &data,int &num) {
LNode *pTemp = NULL;

if (!(GetNode(position, &pTemp))) {
  return false;
}

data = pTemp->data;
num = pTemp->num;

return true;
}
bool LinkList::ListAdd(int adddata)
{
    if(m_pList==NULL) return false;
    pLinkList ptemp=m_pList;
    pLinkList newp=new LNode;
    while(ptemp->next!=NULL)
        {
        ptemp=ptemp->next;
        }
    ptemp->next=newp;
    newp->next=NULL;
    newp->data=adddata;
    m_listLength++;
    return true;
}


bool LinkList::Sort_Insert(int &count)
{
    int i,j;
    if(m_listLength==0) return false;
    for(i=1;i<=m_listLength;i++)
        {
            //GetItem(0)=GetItem(i);
            SetNodeData(0, GetItem(i),0);
            count++;
            if(GetItem(i)<GetItem(i-1))
                {
                for(j=i-1;GetItem(j)>GetItem(j-1);j--)    
                {
                  count++;            
                    SetNodeData(j+1, GetItem(j),0);
                }
                    //m_pList[j+1].data=m_pList[j].data;
                SetNodeData(j+1, GetItem(0),0);
                //m_pList[j+1].data=m_pList[0].data;
                }
        }                                    

    return true;
}

int LinkList::Sort_Quick_Partition(int low,int high,int &count)
{
    int pivotkey;
    SetNodeData(0, GetItem(low),0);
    //m_pList[1].data=m_pList[low].data;
    pivotkey=GetItem(low);
    while(low<high)
        {
            while(low<high && GetItem(high)>=pivotkey) --high;
            SetNodeData(low, GetItem(high),0);
            //m_pList[low].data=m_pList[high].data;
            while(low<high && GetItem(low)<=pivotkey) ++low;
            SetNodeData(high, GetItem(low),0);
            //m_pList[high].data=m_pList[low].data;
            count++;
        }
        SetNodeData(low, GetItem(0),0);
        //m_pList[low].data=m_pList[0].data;
    return low;
}

void LinkList::QSort(int low,int high,int &count)
{
    int pivotloc;
    if(low<high)
    {
        pivotloc=Sort_Quick_Partition(low,high,count);
        QSort(low,pivotloc-1,count);
        QSort(pivotloc+1,high,count);
    }
}
    
void LinkList::Sort_Quick(int &count)
{
    QSort(1,m_listLength,count);
}

int LinkList::GetItem(int pos)
{
    int i=0;
    pLinkList ptemp=m_pList;
    for(i=0;i<pos;i++)
    {
        ptemp=ptemp->next;
        
    }    
return ptemp->data;

//return m_list[i].data;
}
G:\hw\ada\sdad.cpp(116) : error C2039: 'SetNodeData' : is not a member of 'LinkList'
        G:\hw\ada\sdad.cpp(19) : see declaration of 'LinkList'
G:\hw\ada\sdad.cpp(119) : error C2065: 'GetNode' : undeclared identifier
G:\hw\ada\sdad.cpp(132) : error C2039: 'GetNodeData' : is not a member of 'LinkList'
        G:\hw\ada\sdad.cpp(19) : see declaration of 'LinkList'
执行 cl.exe 时出错.
搜索更多相关主题的帖子: private include public 插入法 正整数 
2007-12-16 12:33
zxc1998
Rank: 1
等 级:新手上路
威 望:1
帖 子:133
专家分:0
注 册:2007-3-21
收藏
得分:0 
在类LinkList的定义中没有定义'SetNodeData' 、 'GetNode'、 'GetNodeData' 这三个函数,
这个程序好像不是你自己的。
2007-12-16 20:35
shlg1229
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2007-9-24
收藏
得分:0 
把伪码放进去编译,能通过才怪

个人意见,不代表官方看法
2007-12-17 11:19
ffcloudy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-25
收藏
得分:0 
恩 这不是我的 老师给的时间太少 自己学的又不太好只能临时找别人 这里请大家指点一下
别光批评啊 如果程序是错的 各位高手能否指点下救急啊 马上要交了 3天之内要做2个课设 真的是没办法了
小弟在这留下邮箱了 [email]ffcloudy@[/email]

[[italic] 本帖最后由 ffcloudy 于 2007-12-17 21:35 编辑 [/italic]]
2007-12-17 21:31
快速回复:请教下这段程序错在哪?关于排序问题
数据加载中...
 
   



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

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