零九号 2023-06-03 16:15 采纳率: 60%
浏览 34
已结题

c++线性表类 出错求解决!!

想用c++实现线性表,把线性表作为一个类,进行类的插入删除查找等功能,写了一个头文件和源文件,虽然能运行,但不会显示东西好像没成功,请问哪些地方错了,如何改进
下面是头文件

#ifndef _LINEAR_H
#define _LINEAR_H 
#include<iostream>
using namespace std;

class linear 
{
    class Node
    {
    public:/*这两个设置为私有的无法访问 为什么 都写到类里面了 或者这个写到类外面要怎么处理*/ 
        int value;
        Node *next;

        Node(int x=0)
        {
        value=x;
        next=0;
        }
    } *head;
    
    public:
        void Insert(int pos,int value);//pos位置,value值 
        int Delete(int pos,int *value);
        int Find(int value);
        linear()//构造函数 
        {
            head=new Node;
            if(!head) 
            throw -1;
        }
    
        ~linear()//析构函数 
        {
            delete head;
        }
};

void linear::Insert(int pos,int value)
{
    Node *p=head;
    int c=1;
    
    while(c<pos||!p->next)
    {
        p=p->next;
        c++;
    
    }
    Node *q=new Node(value);
    if(!q) throw -1;
    q=p->next;
    p->next=q;
    cout<<"已插入"<<value;  
}

int linear::Delete(int pos,int *value)
{
    Node *p=head;
    int c=1;
    
    while(c<pos||!p->next)
    {
        p=p->next;
        c++;
    }
    
    if(p->next)
    {
        Node *q=p->next;
        *value=q->value;
        p->next=q->next;
        delete q; 
    }
}

int linear::Find(int value)
{
    Node *p=head->next;
    int c=1;
    while(!p)
    {
        if(p->value==value)
        {
            cout<<"找到"; 
            c=0;
            return c;
        }
        
        p=p->next;
        c++; 
    }
    if(c==1)
    cout<<"未找到"; 
    return -1;
}

#endif

下面是源文件

#include"linear.h"

int main()
{
    linear biao;
    biao.Insert(1,3);
    biao.Insert(2,0);
    biao.Insert(3,7);
    biao.Insert(4,9);
    biao.Find(3);
    int value=3;
    biao.Delete(2,&value);
    return 0;

}

  • 写回答

1条回答 默认 最新

  • Loup&卡普 2023-06-03 21:51
    关注
    • while 的查找 条件应该为与
    while (!p->next &&c< pos)
    

    或有短路,如果给一个特别大的 pos 这里会出问题。

    • Insert 里边 插入那部分应该是
    q->next = p->next;
    p->next = q;
    
    • Find 那里 不应该判断 c 为 1的时候没找到,应该是 走出循环就是没找到
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 专家已采纳回答 6月7日
  • 创建了问题 6月3日

悬赏问题

  • ¥100 调查 Vitis AI 中验证 .xmodel 量化后的正确性
  • ¥30 codelite全屏时file、setting那一行消失了
  • ¥15 gazebo-rviz教程
  • ¥15 付费求做一个自助抢单插件
  • ¥15 bat批处理,关于数据复制问题
  • ¥50 同步两个不同结果的array中某些属性
  • ¥15 悬赏15远程操控解决问题
  • ¥15 CST复制的模型无法单独修改参数?
  • ¥15 前端页面想做个定时任务,但是使用requestAnimationFrame,setinterval和settimeout都不行
  • ¥15 根据以下文字信息,做EA模型图