用单链表对直接插入排序的简单实现
2015-07-28 19:36
357 查看
头文件:
cpp文件:
[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; }
相关文章推荐
- Scala界面Scala界面Panel、Layout实战
- NYOJ-水池数目
- IOS--UI--LessonFMDB
- HDU 2553 N皇后问题
- 火狐下多个span连在一起和换行写存在差异
- 机器学习-CrossValidation交叉验证Python实现
- nyoj 757 (扣分最少)(队列问题)
- spring mongodb Criteria中"and"与"andOperator"方法的区别及"$and"如何工作
- ZOJ 3802 Easy 2048 Again 像缩进DP
- HDU 5319 Painter (模拟)
- 让设计深入人心
- 客户端升级系统升级策略
- USB驱动开发之mass storage的枚举识别过程
- Just Do It: 学习Sinatra
- linux系统管理之无人值守网络安装linux操作系统
- Mybatis 从0-10000
- Verilog之event
- iOS UILabel的输出自适应高度设置
- NYOJ-开心的小明
- HDU 1799