没学过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;
Link(const T info, const Link<T>* nextValue = NULL)
{
data = info;
next = nextValue;
}
};
//定义单链表类型lnkList
template <class T>
class lnkList : public List<T> {
private:
Link<T>* head, * tail;//头指针、尾指针
Link<T>* setPos(const int p);
public:
lnkList(int s);
~lnkList();
bool isEmpty();
void clear();
int length();
bool append(const T value);
bool insert(const int p, const T value);
bool delete(const int p);
bool getValue(const int p, T& value);
bool getPos(int& p, const T value);
}
//返回单链表第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