C+顺序表

来源:互联网 发布:人声消音软件 编辑:程序博客网 时间:2024/06/03 21:31

C++顺序表模板实现

1、数组实现:

#include "iostream"using namespace std;template<class Elem>class AList{private:int maxSize;int listSize;int fence;Elem *Array;public:AList(int size){maxSize=size;listSize=fence=0;Array=new Elem[maxSize];}~AList(){delete[] Array;}void clear(){delete[] Array;listSize=fence=0;Array=new Elem[maxSize];}bool insert(const Elem it){if(listSize==maxSize) return false;for(int i=listSize;i>fence;i--){Array[i]=Array[i-1];}Array[fence]=it;listSize++;return true;}bool append(const Elem it){if(listSize==maxSize) return false;Array[listSize++]=it;return true;}bool remove(Elem& it){if(rightLenght()==0) return false;it=Array[fence];for(int i=fence;i<listSize-1;i++){Array[i]=Array[i+1];}listSize--;return true;}void setStart(){fence=0;}void setEnd(){fence=listSize;}void prev(){if(fence!=0) fence--;}void next(){if(fence<=listSize) fence++;}int leftLenght(){return fence;}int rightLenght(){return listSize-fence;}void print(){int temp=0;cout <<"<";while(temp<fence&&fence)cout <<Array[temp++]<<" ";cout <<"|";while(temp<listSize)cout <<Array[temp++]<<" ";cout <<">"<<endl;}};int main(int argc, char* argv[]){AList<int> aList(10);aList.insert(4);aList.insert(3);aList.print();aList.next();aList.print();int i;aList.append(8);aList.print();aList.remove(i);cout <<i<<endl;aList.print();return 0;}



2、链表实现

#include "iostream"using namespace std;template<class Elem> class Link {  public:Elem element; // Elem value for this node    Link *next;  // Pointer to next node in list    Link(const Elem elemval, Link* nextval =NULL) { element = elemval;  next = nextval;}         Link(Link* nextval =NULL) { next = nextval; } };template<class Elem>class Stack{public:virtual void clear()=0;virtual bool push(const Elem& item)=0;virtual bool pop(Elem& item)=0;virtual bool topValue(Elem& item)=0;virtual void print()=0;virtual int lenght()const=0;};template<class Elem>class LStack:public Stack<Elem>{private:int size;Link<Elem>* top;public:LStack(){          size=0;top=NULL;}void clear(){while(top!=NULL){Link<Elem>* temp=top;top=top->next;delete temp;}}int lenght()const{return size;}bool pop(Elem& item){if(size==0) return false;item=top->element;Link<Elem>* temp=top->next;delete top;top=temp;size--;return true;}bool push(const Elem& item){top=new Link<Elem>(item,top);size++;return true;}bool topValue(Elem& item){if(size==0) return false;item=top->element;return true;}void print(){Link<Elem>* temp=top;while(temp!=NULL){cout <<temp->element<<" ";temp=temp->next;}cout <<endl;}};int main(int argc, char* argv[]){LStack<int> lStack;Stack<int> *stack,&s = lStack;stack = &lStack;stack->push(2);s.push(5);lStack.push(1);lStack.print();int it;lStack.pop(it);cout <<it<<endl;lStack.print();lStack.topValue(it);cout <<it<<endl;return 0;}


0 0
原创粉丝点击