list

来源:互联网 发布:哪个软件卖奢侈品 编辑:程序博客网 时间:2024/05/09 06:54

简单list类

 

#ifndef __COMMANDER_LIST_H__#define __COMMANDER_LIST_H__namespace COMMANDER_NAMESPACE{#include <stdio.h>#include <stdlib.h>typedef int DataType;//一次分配节点struct node {struct node *prev;struct node *next;DataType data;};class list{public:list();~list();bool push_back(DataType &data);bool push_front(DataType &data);bool pop_back();bool pop_front();DataType get_back();DataType get_front();void PrintListFromHeadToEnd();unsigned int RemoveByData(DataType &data);void Empty();private:private:struct node *m_pHead;struct node *m_pLast;size_t m_uiSize;};};#endif


 

#ifndef __COMMANDER_LIST_CPP__#define __COMMANDER_LIST_CPP__#include "Commander_List.h"namespace COMMANDER_NAMESPACE{COMMANDER_NAMESPACE::list::list(){m_pHead = m_pLast = NULL;m_uiSize = 0;}COMMANDER_NAMESPACE::list::~list(){COMMANDER_NAMESPACE::list::Empty();}bool COMMANDER_NAMESPACE::list::push_back(DataType &data){struct node * pTemp = (struct node *)malloc(sizeof(node));if (pTemp == NULL) return false;pTemp->data = data;pTemp->next = NULL;pTemp->prev = NULL;if (m_pHead == NULL) {m_pHead = m_pLast = pTemp;m_uiSize++;return true;}if (m_pLast == NULL) return false;m_pLast->next = pTemp;pTemp->prev   = m_pLast;m_pLast = m_pLast->next;m_uiSize++;pTemp = NULL;return true;}bool COMMANDER_NAMESPACE::list::push_front(DataType &data){struct node * pTemp = (struct node *)malloc(sizeof(node));if (pTemp == NULL) return false;pTemp->data = data;pTemp->next = pTemp->prev = NULL;if (m_pHead == NULL) {m_pHead = m_pLast = pTemp;m_uiSize++;return true;}if (m_pHead == NULL) return false;pTemp->next = m_pHead;m_pHead->prev = pTemp;m_pHead = pTemp;pTemp = NULL;m_uiSize++;return true;}bool COMMANDER_NAMESPACE::list::pop_back(){if (m_pLast == NULL) return false;struct node *pFree = m_pLast;m_pLast = m_pLast->prev;if (m_pLast != NULL) m_pLast->next = NULL;free(pFree);pFree = NULL;m_uiSize--;if (m_pLast == NULL) m_pHead = NULL;return true;}typedef int DataType;bool COMMANDER_NAMESPACE::list::pop_front(){if (m_pHead == NULL) return false;struct node *pFree = m_pHead;m_pHead = m_pHead->next;if (m_pHead != NULL) m_pHead->prev = NULL;free(pFree);pFree = NULL;m_uiSize--;if (m_pHead == NULL) m_pLast = NULL;return true;}DataType COMMANDER_NAMESPACE::list::get_back(){if (m_pLast != NULL) return m_pLast->data;}DataType COMMANDER_NAMESPACE::list::get_front(){if (m_pHead != NULL) return m_pHead->data;}unsigned int COMMANDER_NAMESPACE::list::RemoveByData(DataType &data){struct node *pCur = m_pHead, *pTemp = m_pHead;unsigned int uiRet = 0;while (pCur != NULL){pTemp = pCur->next;if (pCur->data == data){if (pCur->prev == NULL) {//头节点m_pHead = pCur->next;//并非只有一个节点时if (m_pHead != NULL) m_pHead->prev = NULL;}else if (m_pLast == pCur) {//最后节点m_pLast = pCur->prev;m_pLast->next = NULL;}else {//中间节点pCur->prev->next = pCur->next;pCur->next->prev = pCur->prev;}free(pCur);pCur = NULL;uiRet++;m_uiSize--;}//if_pCurpCur = pTemp;}//while_pCurreturn uiRet;}void COMMANDER_NAMESPACE::list::Empty(){struct node *pTemp = m_pHead;while (m_pHead != NULL) {pTemp = m_pHead;m_pHead = m_pHead->next;free(pTemp);}m_pHead = m_pLast = NULL;m_uiSize = 0;}void COMMANDER_NAMESPACE::list::PrintListFromHeadToEnd(){struct node *pTemp = m_pHead;printf("\nthe list is:\n");while (pTemp != NULL) {printf("%d", pTemp->data);printf(pTemp != m_pLast ? " -> " : "\n");pTemp = pTemp->next;}}}#endif