欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

C++中CSimpleList的实现与测试实例

时间:2021-12-17 10:04:14|栏目:C代码|点击:

本文实例讲述了C++简单列表类的实现方法。分享给大家供大家参考。具体方法如下:

_AFXTLS.CPP文件如下:

//#include "StdAfx.h 
#include <stddef.h> 
#include <stdio.h> 
#include "_AFXTLS_.H" 
 
struct MyThreadData{ 
  MyThreadData* pNext; 
  int nShortData; 
}; 
 
void CSimpleList::AddHead(void *p) 
{ 
  *GetNextPtr(p)=m_pHead; 
  m_pHead = p; 
} 
 
BOOL CSimpleList::Remove(void* p) 
{ 
  BOOL bRet = FALSE; 
  if (p == NULL) 
  { 
    bRet = FALSE; 
  } 
 
  if (p == m_pHead) 
  { 
    m_pHead = GetNext(m_pHead); 
    bRet = TRUE; 
  } 
  else 
  { 
    void*  pTest; 
    pTest = m_pHead; 
    while (pTest && (GetNext(pTest) != p)) 
    { 
      pTest = GetNext(pTest); 
    } 
    if (pTest != NULL) 
    { 
      *GetNextPtr(pTest) = GetNext(p); 
      bRet = TRUE; 
    } 
  } 
  return bRet; 
 
} 
 
void main() 
{ 
  MyThreadData* pData; 
  CSimpleList list; 
  list.Construct(offsetof(MyThreadData, pNext)); 
  for (int i=0;i<10;i++) 
  { 
    pData = new MyThreadData; 
    pData->nShortData = i; 
    list.AddHead(pData); 
  } 
 
  //遍历链表,释放MyThreadData对象占用的空间 
  pData = (MyThreadData*)list.GetHead(); 
  while(pData != NULL) 
  { 
    MyThreadData* pNextData = pData->pNext; 
    printf("The value is %d\n",pData->nShortData); 
    delete pData; 
    pData = pNextData; 
  } 
} 

_AFXTLS_.H文件如下:

//#include "StdAfx.h 
#ifndef __AFXTLS_H__ 
#define __AFXTLS_H__ 
#include <Windows.h> 
class CSimpleList 
{ 
public: 
  CSimpleList(int nNextOffset=0); 
  void Construct(int nNextOffset); 
  //接口 
  BOOL IsEmpty() const; 
  void AddHead(void *p); 
  void RemoveAll(); 
  void* GetHead() const; 
  void* GetNext(void* preElement) const; 
  BOOL Remove(void* p); 
 
  //为实现接口所需的成员 
  void  *m_pHead; 
  size_t m_nextOffset; 
  void** GetNextPtr(void* preElement) const; 
}; 
 
//类的内联函数 
inline CSimpleList::CSimpleList(int nNextOffset) 
  {m_pHead = NULL; m_nextOffset = nNextOffset;  } 
 
inline void CSimpleList::Construct(int nNextOffset) 
  {m_nextOffset = nNextOffset;  } 
 
inline BOOL CSimpleList::IsEmpty() const 
{ 
  return m_pHead==NULL; 
} 
//inline void AddHead(void *p) 
//{ 
// 
//} 
inline void CSimpleList::RemoveAll() 
{ 
  m_pHead = NULL; 
} 
inline void* CSimpleList::GetHead() const 
{ 
  return m_pHead; 
} 
inline void* CSimpleList::GetNext(void* preElement) const 
{ 
  return *GetNextPtr(preElement); 
} 
//inline BOOL CSimpleList::Remove(void* p) 
//{ 
// 
//} 
inline void**  CSimpleList::GetNextPtr(void* preElement) const 
{ 
  return (void**)((BYTE*)preElement+m_nextOffset); 
} 
 
 
#endif

希望本文所述对大家的C++程序设计有所帮助。

上一篇:距离详解Linux下的UDP方式通讯

栏    目:C代码

下一篇:C语言实现扫雷游戏简易版

本文标题:C++中CSimpleList的实现与测试实例

本文地址:http://www.codeinn.net/misctech/187126.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有