您的位置:首页 > 其它

用单链表对直接插入排序的简单实现

2015-07-28 19:36 357 查看
头文件:

[code]#ifndef _MAIN_H_
#define _MAIN_H_

typedef struct tagNode
{
    int iData;
    tagNode* pNext;
    tagNode():iData(0),pNext(NULL){};
}NODE,*PNODE;

class LST
{
public:
    LST();
    ~LST();
    PNODE CreatNode(int iData); 
    void  InsertNode(PNODE pNewNode);
    void  PrintNode();
protected:

private:
    PNODE pHead;//链表头结点为空结点,不保存实际数据内容,但是在析构函数中必须释放这个结点。
};

#endif


cpp文件:

[code]#include <IOSTREAM>
#include "main.h"

using namespace std;

/**************************************************/
/* CLASS function defintion                                             */
/**************************************************/
PNODE LST::CreatNode(int iData)
{
    PNODE pNewNode = NULL;
    pNewNode = new NODE;
    if (NULL == pNewNode)
    {
        return NULL;
    }
    pNewNode->iData = iData;
    return (pNewNode);
}

void LST::InsertNode(PNODE pNewNode)
{
    PNODE pCurNode = NULL;
    PNODE pTmpNode = NULL;

    if (NULL == pNewNode)   return ;
    if (NULL == pHead)
    {
        pHead = new NODE;
    }
    if (pHead->pNext == NULL)   
    {
        pHead->pNext = pNewNode;
        return ;
    }

    pCurNode = pHead->pNext;

    while(NULL != pCurNode)
    {       
        if (pNewNode->iData < pCurNode->iData)
        {
            /*分两种情况考虑:
            1.如果pCurNode为头结点之后的第一个结点
              则直接插入pNewNode到头结点之后,并与原链表合并
            2.如果不是上述情况,则将pNewNode插入到pTmpNode和
              pCurNode之间
            */
            pNewNode->pNext = pCurNode;
            if (pTmpNode == NULL)
            {
                pHead->pNext = pNewNode;
            }
            else
            {
                pTmpNode->pNext = pNewNode;
            }

            return;
        }

        pTmpNode = pCurNode;    //
        pCurNode = pCurNode->pNext;
    }

    //如果程序运行到这里,表示pNewNode比原链表中所有结点均大
    //则直接插入到链表后即可
    pTmpNode->pNext = pNewNode;

}

void LST::PrintNode()
{
    PNODE pTmpNode = NULL;
    pTmpNode = pHead->pNext;
    while(pTmpNode != NULL)
    {
        cout<<pTmpNode->iData<<",";
        pTmpNode = pTmpNode->pNext;
    }
    cout<<endl;
}

void LST::DelNode()
{

}

LST::LST()
{
    pHead = NULL;
}

LST::~LST()
{

}

/**************************************/
/* Main function                                                        */
/**************************************/
int main()
{
    int     iIn;
    PNODE   pNode = NULL;
    LST     lst;
    //while((cIn = getchar() != '\n'))
    while(cin>>iIn)
    {
        if (iIn == -1)
        {//退出条件判断
            break;
        }
        //pNode = lst.CreatNode((int)atoi(&cIn));
        pNode = lst.CreatNode(iIn);
        if (NULL != pNode)
        {
            lst.InsertNode(pNode);
        }
    }

    lst.PrintNode();
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: