链表
#ifndef LIST_H
#define LIST_H
#include<iostream>
using namespace std;
template <typename E> class List
{//List ADT
private:
void operator=(const List&){}
List(const List&){}
public:
List(){}
virtual ~List(){}
virtual void clear()=0;
virtual void insert(const E& item)=0;
virtual void append(const E& item)=0;
virtual E remove()=0;
virtual void moveToStart()=0;
virtual void moveToEnd()=0;
virtual void prev()=0;
virtual void next()=0;
virtual int length() const=0;
virtual int currPos() const=0;
virtual void moveToPos(int pos)=0;
virtual const E& getValue() const=0;
};
#endif
#include "List.h"
#include<iostream>
using namespace std;
template <typename E> class Link
{
public:
E element;
Link *next;
Link(const E& elemval,Link* nextval=NULL)
{element=elemval;next=nextval;}
Link(Link* nextval=NULL){next=nextval;}
};
template <typename E> class LList: public List<E>
{
private:
Link<E>* head;
Link<E>* tail;
Link<E>* curr;
int cnt;
void init()
{
curr=tail=head=new Link<E>;
cnt=0;
}
void removeall()
{
while (head!=NULL)
{
curr = head;
head = head->next;
delete curr;
}
}
public:
LList(int size=100){init();}
~LList(){removeall();}
void print() const;
void clear(){removeall();init();}
void insert (const E& it)
{
curr->next =new Link<E>(it, curr->next);
if(tail == curr)tail=curr->next;
cnt++;
}
void append (const E& it)
{
tail=tail->next =new Link<E> (it, NULL);
cnt++;
}
E remove ()
{
if(curr->next!=NULL)
{
E it = curr->next->element;
Link<E>*ltemp=curr->next;
if (tail==curr->next) tail=curr;
curr->next=curr->next->next;
delete ltemp;
cnt--;
return it;
}
else cout<<"No element";
}
void moveToStart(){curr = head;}
void moveToEnd(){curr = tail;}
void prev()
{
if (curr==head) return;
Link<E>* temp=head;
while (temp->next!=curr)temp=temp->next;
curr=temp;
}
void next()
{if (curr!=tail)curr=curr->next;}
int length()const{return cnt;}
int currPos()const
{
Link<E>* temp=head;
int i;
for(i=0;curr!=temp;i++)
temp=temp->next;
return i;
}
void moveToPos(int pos)
{
if((pos>=0)&&(pos<=cnt))
{
curr=head;
for(int i=0;i<pos;i++)curr=curr->next;
}
else cout<<"Position out of range";
}
const E& getValue()const
{
if(curr->next!=NULL)return curr->next->element;
else cout<<"No value";
}
};
#include <iostream>
#include <stdio.h>
#include "LList.h"
using namespace std;
int main( )
{
int n;
int a=0,b=0,c=0;
char d;
LList<char>L(100);
while((d=getchar())!='\n')L.append(d);
n=L.length();
for(int i=0;i<n;i++)
{
L.moveToPos(i);
d=L.getValue();
if((d>='A'&&d<='Z')||(d>='a'&&d<='z'))
a++;
else if(d>='0'&&d<='9')
{
b++;
L.remove();
i--;
n--;
}
else c++;
}
cout<<a<<' '<<b<<' '<<c<<endl;
for(int i=0;i<n;i++)
{
L.moveToPos(i);
cout<<L.getValue();
}
cout<<endl;
return 0;
}
顺序表
#ifndef LIST_H
#define LIST_H
#include<iostream>
using namespace std;
template <typename E> class List
{//List ADT
private:
void operator=(const List&){}
List(const List&){}
public:
List(){}
virtual ~List(){}
virtual void clear()=0;
virtual void insert(const E& item)=0;
virtual void append(const E& item)=0;
virtual E remove()=0;
virtual void moveToStart()=0;
virtual void moveToEnd()=0;
virtual void prev()=0;
virtual void next()=0;
virtual int length() const=0;
virtual int currPos() const=0;
virtual void moveToPos(int pos)=0;
virtual const E& getValue() const=0;
};
#endif
#include<iostream>
#include "List.h"
template <typename E>
class AList : public List<E>
{
private:
int maxSize;
int listSize;
int curr;
E* listArray;
public:
AList (int size=100):maxSize(size)
{
listSize = curr = 0;
listArray =new E[maxSize];
}
~AList () {delete [] listArray;}
void clear()
{
delete [] listArray;
listSize = curr = 0;
listArray = new E [maxSize];
}
void insert (const E& it)
{
if(listSize < maxSize)
{
for (int i=listSize; i>curr; i--)
listArray[i] = listArray [i-1];
listArray [curr] = it;
listSize++;
}
else cout<<"List capacity exceeded";
}
void append (const E& it)
{
if(listSize < maxSize){listArray[listSize++] =it;}
else cout<<"List capacity exceeded";
}
E remove ()
{
if((curr>=0) && (curr<listSize))
{
E it = listArray[curr];
for (int i=curr;i<listSize-1;i++)
listArray[i]=listArray[i+1];
listSize--;
return it;
}
else cout<<"No element";
}
void moveToStart(){curr=0;}
void moveToEnd(){curr=listSize;}
void prev(){if(curr!=0)curr--;}
void next(){if(curr < listSize) curr++;}
int length()const{return listSize;}
int currPos()const{return curr;}
void moveToPos(int pos)
{
if((pos>=0)&&(pos<=listSize))curr = pos;
else cout<<"Pos out of range";
}
const E& getValue() const
{
if((curr>=0)&&(curr<listSize))return listArray [curr];
else cout<<"No current element";
}
};
#include <iostream>
#include <stdio.h>
#include "AList.h"
int main( )
{
int n;
int a=0,b=0,c=0;
char d;
AList<char>L(100);
while((d=getchar())!='\n')L.append(d);
n=L.length();
for(int i=0;i<n;i++)
{
L.moveToPos(i);
d=L.getValue();
if((d>='A'&&d<='Z')||(d>='a'&&d<='z'))
a++;
else if(d>='0'&&d<='9')
{
b++;
L.remove();
i--;
n--;
}
else c++;
}
cout<<a<<' '<<b<<' '<<c<<endl;
for(int i=0;i<n;i++)
{
L.moveToPos(i);
cout<<L.getValue();
}
cout<<endl;
return 0;
}