没学过c++,可以帮忙补充一下实现单链表基本操作剩下的程序吗
#include <iostream.h>
//定义线性表类型List
template <class T>
class List {
void clear();
bool isEmpty();
bool insert(const int p, const T value);
bool delete1(const int p);
bool getPos(int &p, const T value);
bool getValue(const int p, T& value);
bool setValue(const int p, const T value);
};
//定义单链表结点类型
template <class T>
class Link{
public:
T data;
Link<T> *next;
};
//定义单链表类型lnkList
template <class T>
class lnkList : public List<T>{
private:
Link<T> *head, *tail; //头指针、尾指针
//返回单链表第p个元素的地址(p=-1返回头结点地址,0返回第1结点地址,不存在返回NULL)
Link<T> *setPos(const int p){
if(p == -1) return head; //p为-1则返回头结点地址
int count=0;
Link<T> *tmp=head->next; //c指向第1个结点 head->头结点 c->第1结点
while(tmp != NULL && count<p){ //head->头结点->第1结点->c第2结点->第3结点NULL
count++;
tmp=tmp->next; //c指向下一结点(指针传递技术)
}
return c;
}
//c指向尾结点的条件:c->next==NULL
//c指向倒数第二个结点的条件: c->next->next==NULL
public:
//构造函数:构造一个只有头结点的空链表
lnkList(){
head=tail=new Link<T>;
head->next=NULL;
}
//析构函数:删除所有结点
~lnkList(){
Link<T> *tmp;
while(head!=NULL){
tmp=head; //tmp指向头结点
head=head->next; //head指向下一结点
delete tmp; //释放头结点
}
}
//2.显示
bool display(){
Link<T> *tmp=head->next; //tmp指向第1结点
if(tmp==NULL) cout<<"空表\n";
else{
while(tmp!=NULL) {
cout<<tmp->data<<" ";
tmp=tmp->next; //tmp指向下一结点
}
cout<<endl;
}
return true;
}
//3.求表长
bool length(int& i){
i=0;
Link<T> *p=head->next; //p指向第1结点
while(p!=NULL){
i++;
p=p->next;
}
return true;
}
//5.追加
bool append(const T value){
Link<T> *p, *q;
q = new Link<T>; //q指向新结点
q->data=value; //填入新结点的数据域
q->next=NULL; //填入新结点的指针域NULL
p=tail; //p指向尾结点,也可以p=head->next; while(p->next!=NULL) p=p->next;
p->next=q; //新结点链入原尾结点之后
tail=q; //修改尾指针
return true;
}
//尾结点的条件p->next == NULL,头结点的条件p == head
//第1结点的条件p == head->next,单链表结束的条件 p == NULL
};
void main()
{
lnkList<int> LL;
int choice, p, value;
bool ok;
do {
cout<<"单链表程序(0退出,1清除,2显示,3表长,4插入,5追加,6删除,7查找,8修改,9定位),请选择:";
cin>>choice;
switch (choice) {
case 0:
cout<<"再见!\n";
break;
case 1:
break;
case 2:
ok=LL.display();
if(ok==true) cout<<"显示操作成功!\n";
else cout<<"显示操作失败!\n";
break;
case 3:
ok=LL.length(p);
if(ok==true) cout<<"求表长操作成功!表长为:"<<p<<endl;
else cout<<"求表长操作失败!\n";
break;
case 4:
break;
case 5:
cout<<"请输入元素值:"; cin>>value;
ok=LL.append(value);
if(ok==true) cout<<"追加操作成功!\n";
else cout<<"追加操作失败!\n";
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
default:
cout<<"选择错误!\n";
}
} while (choice != 0);
}
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633