clCirList.cpp
资源名称:ClassList.rar [点击查看]
上传用户:zbhuiyi
上传日期:2013-06-17
资源大小:13k
文件大小:3k
源码类别:
Email服务器
开发平台:
Visual C++
- //#include "iostream.h"
- typedef struct node {
- int data;
- struct node *next;
- }ST_node;
- //class declare:
- class clCirList;
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //Circle Linked list class
- //the head node doesn't store any data
- class clCirList
- {
- public:
- static ST_node *ArrayToCirList(int array[],int length);
- static int CountNode(ST_node *pHead);
- static void Invert(ST_node *pHead);
- static void Show(ST_node *pHead);
- static void FreeList(ST_node *pHead);
- };
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //函数实现:
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- ST_node* clCirList::ArrayToCirList(int array[],int length)
- {
- ST_node *pHead,*pPrev,*pThis;int i;
- if (length==0) {return NULL;}
- pHead=new ST_node;
- pPrev=pHead;
- for (i=0; length; i++,length--){
- pPrev->next=new ST_node;
- pThis=pPrev->next;
- pThis->data=array[i];
- pPrev=pThis;
- }
- pThis->next=pHead;
- return pHead;
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //count the node of a circle list(except the head node)
- int clCirList:: CountNode(ST_node *pHead)
- {
- ST_node *pTemp;int count=0;
- pTemp=pHead->next;
- while (pTemp!=pHead){
- count++;
- pTemp=pTemp->next;
- }
- return count;
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- void clCirList::Show(ST_node *pHead)
- {
- ST_node *ptemp;
- ptemp=pHead->next;
- while (ptemp!=pHead){
- cout << ptemp->data;
- ptemp=ptemp->next;
- }
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //invert a circle list(the head node remain)
- void clCirList:: Invert(ST_node *pHead)
- {
- ST_node *pPrev,*pThis,*ptemp;
- pPrev=pHead->next;
- pThis=pPrev->next;
- pPrev->next=pHead;
- while (pThis!=pHead){
- ptemp=pThis->next;
- pThis->next=pPrev;
- pPrev=pThis;pThis=ptemp;
- }
- pHead->next=pPrev;
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- //free the circle list
- void clCirList::FreeList(ST_node *pHead)
- {
- ST_node *pThis,*pPrev;
- pPrev=pHead;
- pThis=pPrev->next;
- while (pThis!=pHead){
- delete pPrev;
- pPrev=pThis;
- pThis=pThis->next;
- }
- delete pPrev;
- }
- //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<