1、数据结构与算法分析上机实验二一 程序清单/声明文件/文件名:List.h#define null 0/线性表的抽象类声明template class List public: virtual void setnull()=0; virtual bool insert(const Elem&)=0; virtual bool append(const Elem&)=0; virtual bool remove(Elem&)=0; virtual int locate(const Elem& )=0; virtual void setstart()=0; virtual void next()=0
2、; virtual int length()const=0; virtual bool get(const int i)=0; virtual void display()const=0; ;template class Link public: Link *next; Elem element; Link(const Elem& elemental,Link*nextal=null) element=elemental; next=nextal; Link(Link*nextal=null) next=nextal; ;/链表实现声明/文件名:Llist.h#includeiostream#
3、includeList.h#define defualtness 50using namespace std;/链表实现声明template class Llist : public List private: Link*head; Link*tail; Link*fence; int leftcnt; int rightcnt; void init() fence=tail=head=new Link; leftcnt=rightcnt=0; void removeall() while(head!=null) fence=head; head=head-next; delete fence
4、; public: Llist(int size=defualtness) init(); Llist() removeall(); /置空表void setnull() removeall(); init();/插入结点bool insert(const Elem& it) fence-next=new Link(it,fence-next); if(tail=fence) tail=fence-next; rightcnt+; return true;/添加元素bool append(const Elem& item) tail-next=new Link(item,null); tail
5、=tail-next; rightcnt+; return 1;bool remove(Elem& item) if(fence-next=null) return 0; item=fence-next-element; Link*ltemp=fence-next; fence-next=ltemp-next; if(tail=ltemp) tail=fence; delete ltemp; rightcnt-; return true;/按值查找int locate(const Elem&it) setstart(); for(int i=0;inext-element) coutit的位置
6、为:i+1next; cout请输入正确的值next;int length()const return (rightcnt+leftcnt); /取表中第i个结点bool get(const int n) setstart(); for(int i=0;inext; cout位置为n的值为next-elementendl; return 1;/显示链表void display()const Link*temp=head; cout我的链表为:; while(temp!=fence) coutnext-elementnext; coutnext!=null) coutnext-elementne
7、xt; coutendl;/主文件/文件名:main.cpp#includeLList.hint main() char m,n,x,y; Llist L(50); L.append(a); L.append(b); L.append(c); L.append(d); L.append(e); L.append(f); L.display(); L.locate(e); L.get(4); L.setstart(); L.next(); L.remove(m); L.display(); L.remove(n); L.display(); L.setstart(); L.remove(x); L.display(); L.remove(y); L.display(); return 0;二 运行结果