a1231033 a1231033
关注数: 8 粉丝数: 29 发帖数: 1,156 关注贴吧数: 33
【急求】单链表实现问题,非常急,下午就要!!!!! LinearList.h #pragma once#include #include <string>#include "LinearList.h"#include "LinkNode.h"using namespace std; template class List:public LinearList{public:List();List(const T & x);List(List& L);void MakeEmpty();int Length();LinkNode * GetHead();LinkNode * Search(T & x);LinkNode * Locate(int i);bool GetData(int i,T & x);void SetData(int i,T & x);bool Insert(T & x);bool Remover(T & x);bool IsEmpty()const;bool IsFull()const;void Input();void Output();List& operator= (List & L);~List();protected:LinkNode* first;}; template List::List(){//带头节点first = new LinkNode;first->link = NULL;} template List::List(const T & x ){first = new LinkNode(x);first->link = NULL;} template List::List(List & L){T value;LinkNode * srcptr = L.GetHead(); //被复制表的附加头节点地址LinkNode * destptr = first = new LinkNode;while (srcptr ->link != NULL ){ //逐个节点复制value = srcptr->link->data; destptr->link = new LinkNode(value);destptr = destptr->link;srcptr = srcptr->link; }destptr->link = NULL;} templatevoid List::MakeEmpty(){//将链表置为空LinkNode *q;while(first->link != NULL){q = first->link; //保存被删节点,从链上摘下该节点first->link = q->link; //删除仅保留一个表头节点delete q;}delete first;} templateint List::Length(){LinkNode * p = first->link;int count = 0;while(p != NULL){p = p->link;count++;}return count;} templateLinkNode * List::Search(T & x){//在表中搜索含数据x的节点,若搜索成功返回该节点的地址,否则返回NULLLinkNode * current = first->link;while(current != NULL){if(current->data == x){break;}else{current = current->link;}}return current;} template LinkNode * List::Locate(int i){ //元素个数从开始 if((i <= 0) ||(i > this->Length())){ return NULL; } LinkNode * current = first; int k = 0; for(;;){ current = current->link; k++; if(k == i){ return current; } }} templatebool List::GetData(int i,T & x){if( i <= 0){return NULL;}LinkNode * current = Locate(i);if(current == NULL){return false;}else{x = current ->data;return true;}} templatevoid List::SetData(int i,T & x){if( i <= 0){return ;}LinkNode * current = Locate(i);if(current == NULL){return ;}else{x = current ->data;}} templatebool List::Insert(T & x){LinkNode *current = first->link;LinkNode *pre = first;LinkNode * newNode = new LinkNode(x);while(current != NULL){if(x< current->data) break;pre=current; current=current->link;} newNode->link = current; //链入 pre->link = newNode;return true; } templatebool List::Remover(T & x){LinkNode *current =first->link; LinkNode *pre=first; while(current!=NULL){if(x<=current->data) break;pre=current;current=current->link;}if(current->data==x){ pre->link=current->link; delete pre; return 1;} return 0;} templatevoid List::Input(){cout<<"请输入元素个数:"<>num;T temp;cout<<"开始输入元素:"<>temp;Insert(temp);}} templatevoid List::Output(){//cout<<"单链表!"< * current = first->link;int i = 1;while(current != NULL){cout.width(8);cout.fill(' ');cout<data<link;}//cout<<"单链表!"<bool List::IsEmpty()const{return first->link == NULL?true:false;}templatebool List::IsFull()const{return false;} templateLinkNode * List::GetHead(){return first;}templateList & List::operator= (List & L){T value;LinkNode * srcptr = L.GetHead();LinkNode * destptr = first = new LiskNode;while(srcptr->link != NULL){value = srcptr->link->data;destptr ->link = new LinkNode(value);destptr = destptr->link;srcptr = srcptr->link;}destptr ->link = NULL;return *this;}templateList::~List(){MakeEmpty();}
1 下一页