最后一个括号编译器显示:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C1075 “{”: 未找到匹配令牌
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0067 应输入“}”
错在哪里,要怎么去修改?
#include <iostream>
using namespace std;
//定义线性表类型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 tmp;
}
//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; //释放头结点
}
}
//1.清除
bool clear()
{
Link<T>* tmp;
tmp = head->next;
while (tmp != NULL)
{
head->next = tmp->next;
delete tmp
tmp = head->next;
}
return true;
}
//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;
}
// 4.插入
bool insert(const int p, const T value)
{
Link<T>* tmp, * q;
if ((tmp = setPos(p - 1)) == NULL)
{
cout << "非法插入点" << end1;
return false;
}
q = new Link<T>;
q->data = value;
q->next = tmp->next;
tmp->next = q;
if (tmp == tail)
tail = q;
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
//6.删除
bool delete1(const int p)
{
Link<T>* tmp, * q;
if ((tmp = setPos(p - 1)) = NULL || tmp == tail)
{
cout << "非法删除点" << end1;
return false;
}
q = tmp->next;
if (q == tail)
{
tail = tmp;
tmp->next == NULL;
delete q;
}
else if (q != NULL)
{
tmp->next = q->next;
delete q;
}
return true;
}
//7.查找
bool getValue(const int p, T& value)
{
Link <T>* tmp = head->next;
int i = 1;
while (tmp != NULL && i < p)
{
tmp = tmp->next;
i++;
}
value = tmp->data;
return true;
}
//8.修改
bool setValue(const int p, T& value)
{
Link<T>* tmp = head->next;
int i = 1;
while (tmp != NULL && i < p)
{
tmp = tmp->next;
i++;
}
tmp->data = value;
return true;
}
//9.定位
bool getPos(int& p, const T value)
{
Link<T>* tmp = head->next;
int i = 0;
while (tmp != NULL)
{
if (tmp->data == value)
{
p = i;
return true;
}
i++;
tmp = tmp->next;
}
return true;
}
int 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:
ok = LL.clear();
if (ok == true) cout << "清除操作成功!\n";
else cout << "清除操作失败!\n";
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:
cout << "位置: "; cin >> p;
cout << "元素: "; cin >> value;
ok == LL.insert(p, value);
if (ok == true)cout << "插入操作成功!\n";
else cout << "插入操作失败!\n";
break;
case 5:
cout << "请输入元素值:"; cin >> value;
ok = LL.append(value);
if (ok == true) cout << "追加操作成功!\n";
else cout << "追加操作失败!\n";
break;
case 6:
cout << "位置:"; cin >> p;
ok == LL.delete1(p);
if (ok == true)cout << "删除表元操作成功!\n";
else cout << "删除表元操作失败!\n";
break;
case 7:
cout << "位置:"; cin >> p;
ok == LL.getValue(p, value);
if (ok == true)cout << "查表元操作成功!\n元素值为:" << value << endl;
else cout << "差表元操作失败!\n";
break;
case 8:
cout << "位置:"; cin >> p;
cout << "元素:"; cin >> value;
ok == LL.setValue(p, value);
if (ok == true)cout << "修改表元操作成功!\n";
else cout << "修改表元操作失败!\n";
break;
case 9:
cout << "元素:"; cin >> value;
ok == LL.getPos(p, value);
if (ok == false) cout << "元素不存在!\n";
else
{
cout << "定位操作成功!\n";
if (p == 0) cout << "元素不存在!\n";
else cout << "元素位置为:" << p << endl;
}
break;
default:
cout << "选择错误!\n";
}
}
while (choice != 0);
}