一个简单的双向链表
2014-05-17 23:21
253 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct SDblLNode
{
int iDta;
SDblLNode* pPre;
SDblLNode* pNext;
};//链表数据
class CDblLink
{
public:
CDblLink();
virtual ~CDblLink();
bool push( int iDta );
bool Delete( int iDta );
void Show( bool bForward = false );
private:
SDblLNode* m_pHead;
};
CDblLink::CDblLink()
{
m_pHead = NULL;
}
CDblLink::~CDblLink()
{
if( m_pHead )
{
free( m_pHead );
m_pHead = NULL;
}
}
bool CDblLink::push( int iDta )
{
SDblLNode* pNode = (SDblLNode*)malloc( sizeof( SDblLNode ) );
if( !pNode )
{
return false;
}
pNode->iDta = iDta;
pNode->pNext = pNode->pPre = NULL;
if( !m_pHead )
{
m_pHead = pNode;
m_pHead->pPre = m_pHead->pNext = m_pHead;
return true;
}
m_pHead->pPre->pNext = pNode;
pNode->pNext = m_pHead;
pNode->pPre = m_pHead->pPre;
m_pHead->pPre = pNode;
return true;
}
bool CDblLink::Delete( int iDta )
{
if( !m_pHead )
{
return false;
}
if( m_pHead->iDta == iDta )
{
m_pHead->pNext->pPre = m_pHead->pPre;
m_pHead->pPre->pNext = m_pHead->pNext;
return true;
}
SDblLNode* pCur = m_pHead;
while( pCur->pNext != m_pHead )
{
if( pCur->iDta == iDta )
{
break ;
}
pCur = pCur->pNext;
}
if( pCur == m_pHead )
{
return false;
}
pCur->pNext->pPre = pCur->pPre;
pCur->pPre->pNext = pCur->pNext;
free ( pCur );
pCur = NULL;
}
void CDblLink::Show( bool bForward/* = false*/ )
{
SDblLNode* pCur = m_pHead;
if( bForward )
{
pCur = pCur->pPre;
}
else
{
printf( "%d\t", pCur->iDta );
pCur = pCur->pNext;
}
while( pCur != m_pHead )
{
printf( "%d\t", pCur->iDta );
bForward ? pCur = pCur->pPre : pCur = pCur->pNext;
}
if( bForward )
{
printf( "%d\t", m_pHead->iDta );
}
}
int main(int argc, char* argv[])
{
CDblLink list;
for( int i = 0; i < 100; ++i )
{
list.push( i );
}
printf("Init:\n");
printf("\nForward:\n");
list.Show( true );
printf("\nBackward\n");
list.Show( false );
for( i = 10; i < 50; ++i )
{
list.Delete( i );
}
printf("\ndelete 10~50:\n");
printf("\nForward:\n");
list.Show( true );
printf("\nBackward\n");
list.Show( false );
return 0;
}
#include <stdlib.h>
#include <string.h>
struct SDblLNode
{
int iDta;
SDblLNode* pPre;
SDblLNode* pNext;
};//链表数据
class CDblLink
{
public:
CDblLink();
virtual ~CDblLink();
bool push( int iDta );
bool Delete( int iDta );
void Show( bool bForward = false );
private:
SDblLNode* m_pHead;
};
CDblLink::CDblLink()
{
m_pHead = NULL;
}
CDblLink::~CDblLink()
{
if( m_pHead )
{
free( m_pHead );
m_pHead = NULL;
}
}
bool CDblLink::push( int iDta )
{
SDblLNode* pNode = (SDblLNode*)malloc( sizeof( SDblLNode ) );
if( !pNode )
{
return false;
}
pNode->iDta = iDta;
pNode->pNext = pNode->pPre = NULL;
if( !m_pHead )
{
m_pHead = pNode;
m_pHead->pPre = m_pHead->pNext = m_pHead;
return true;
}
m_pHead->pPre->pNext = pNode;
pNode->pNext = m_pHead;
pNode->pPre = m_pHead->pPre;
m_pHead->pPre = pNode;
return true;
}
bool CDblLink::Delete( int iDta )
{
if( !m_pHead )
{
return false;
}
if( m_pHead->iDta == iDta )
{
m_pHead->pNext->pPre = m_pHead->pPre;
m_pHead->pPre->pNext = m_pHead->pNext;
return true;
}
SDblLNode* pCur = m_pHead;
while( pCur->pNext != m_pHead )
{
if( pCur->iDta == iDta )
{
break ;
}
pCur = pCur->pNext;
}
if( pCur == m_pHead )
{
return false;
}
pCur->pNext->pPre = pCur->pPre;
pCur->pPre->pNext = pCur->pNext;
free ( pCur );
pCur = NULL;
}
void CDblLink::Show( bool bForward/* = false*/ )
{
SDblLNode* pCur = m_pHead;
if( bForward )
{
pCur = pCur->pPre;
}
else
{
printf( "%d\t", pCur->iDta );
pCur = pCur->pNext;
}
while( pCur != m_pHead )
{
printf( "%d\t", pCur->iDta );
bForward ? pCur = pCur->pPre : pCur = pCur->pNext;
}
if( bForward )
{
printf( "%d\t", m_pHead->iDta );
}
}
int main(int argc, char* argv[])
{
CDblLink list;
for( int i = 0; i < 100; ++i )
{
list.push( i );
}
printf("Init:\n");
printf("\nForward:\n");
list.Show( true );
printf("\nBackward\n");
list.Show( false );
for( i = 10; i < 50; ++i )
{
list.Delete( i );
}
printf("\ndelete 10~50:\n");
printf("\nForward:\n");
list.Show( true );
printf("\nBackward\n");
list.Show( false );
return 0;
}
相关文章推荐
- 一个简单的双向链表(C语言)
- 一个简单的学生信息管理系统(循环双向链表)
- 一个简单的双向循环链表的实现
- 数据结构复习 之 一个简单双向链表的实现
- 一个简单的双向链表的例子
- 构建一个简单的链表
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 实现双向链表删除一个节点P,在节点P后插入一个节点
- 转载的标准文档:C语言实现一个简单的单向链表list
- 一个通用链表的简单实现
- 一个简单的"单向链表"
- 一个双向链表的单指针实现
- 数据结构中关于链表的一个简单问题
- 一个完整的双向链表程序(C语言版)
- BNUOJ 26182 -----------Army Buddies 用结构体 仿双向链表的简单操作
- 简单双向链表(C++模版技术实现)
- C语言实现一个简单的单向链表list
- 程序一:带头结点双向链表的简单实现
- 《Delphi 算法与数据结构》学习与感悟[6]: 一个简单的"单向链表"
- C语言实现一个简单的单向链表list