greenwooo 2022-03-15 20:46 采纳率: 66.7%
浏览 16
已结题

c++单链表最后一个括号编译器显示有误,怎么修改

最后一个括号编译器显示:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 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);
}
  • 写回答

2条回答 默认 最新

  • 浪客 2022-03-15 20:57
    关注

    class lnkList 类的末尾缺一个},

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题