双向循环链表简单实现
#include <iostream>
using namespace std;
struct Info
{
int nNo;
char szNo[20];
};
struct InfoListNode
{
Info info;
InfoListNode *next;
InfoListNode *prev;
};
InfoListNode *g_list = NULL;
//插入队首
void insertBegin(InfoListNode *pList)
{
g_list->next->prev = pList;
pList->next = g_list->next;
pList->prev = g_list;
g_list->next = pList;
}
//插入队尾
void insertEnd(InfoListNode *pList)
{
g_list->prev->next = pList;
pList->prev = g_list->prev;
g_list->prev = pList;
pList->next = g_list;
}
//删除某个元素
void deleteItem(InfoListNode *pList)
{
pList->next->prev = pList->prev;
pList->prev->next = pList->next;
delete pList;
pList = NULL;
}
void LoopPrint(int n)
{
printf("%d time\n", n);
InfoListNode *pList = g_list->next;
while(pList != g_list)
{
printf("%d ", pList->info.nNo);
pList = pList->next;
}
printf("\n");
}
void InitList()
{
if (g_list == NULL)
{
g_list = new InfoListNode;
g_list->next = g_list;
g_list->prev = g_list;
}
else
{
InfoListNode *pList = g_list->next;
while(pList != g_list)
{
InfoListNode *tmp = pList;
pList = pList->next;
deleteItem(tmp);
}
}
}
int main()
{
g_list = new InfoListNode;
g_list->next = g_list;
g_list->prev = g_list;
int iCount = 0;
InfoListNode* pTmp = new InfoListNode;
pTmp->info.nNo = 0;
insertBegin(pTmp);
LoopPrint(iCount++);
InfoListNode* pTmp1 = new InfoListNode;
pTmp1->info.nNo = 1;
insertBegin(pTmp1);
LoopPrint(iCount++);
InfoListNode* pTmp2 = new InfoListNode;
pTmp2->info.nNo = 2;
insertBegin(pTmp2);
LoopPrint(iCount++);
InfoListNode* pTmp3 = new InfoListNode;
pTmp3->info.nNo = 3;
insertEnd(pTmp3);
LoopPrint(iCount++);
deleteItem(pTmp1);
LoopPrint(iCount++);
InitList();
LoopPrint(iCount++);
InfoListNode* pTmp4 = new InfoListNode;
pTmp4->info.nNo = 4;
insertBegin(pTmp4);
LoopPrint(iCount++);
system("pause");
return 0;
}
作者:疯狂青蛙
出处:http://www.cnblogs.com/boyisjl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显页面给出原文链接,否则保留追究法律责任的权利。