双向循环链表简单实现

#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;
}
posted @ 2012-09-06 23:25  疯狂青蛙  阅读(126)  评论(0编辑  收藏  举报