C ++中的单向链表

时间:2015-05-01 19:23:56

标签: c++ linked-list

我开始研究算法和数据结构。我决定尝试使用单向链表。它包含在所选元素之后插入元素,删除具有给定值的元素和返回已删除项目的数量的函数,函数返回列表和类的当前内容以在文件上写入和读取。功能上存在一个小问题,必须添加新元素。调试器返回以下错误:

AiSD.exe中0x00e71ea2的第一次机会异常:0xC0000005:访问冲突读取位置0x00000000。

AiSD.exe中0x00e71ea2处的未处理异常:0xC0000005:访问冲突读取位置0x00000000。

看起来像指针的问题,但我不知道如何解决它。它现在不是我的专长......但是!所以我请你帮帮我有一个代码: 的

#include<iostream>
#include<fstream>
#include<string>
using namespace std;

struct Node
{
    Node *next;
    int key;
};

class List
{
public:
    Node *head;
    unsigned int counter;

    List()
    {
        head = NULL;
        counter = 0;
    }

    unsigned size(Node *p)
    {
        unsigned int c=0;

        while(p)
        {
            c++;
            p = p->next;
        }
        return c;
    }


    void Addafter(Node *e, int v)
    {
    Node *p = new Node;
    p->next = e->next; //there's a problem
    p->key = v;
    e->next = p;
    }   

    int Delete(int v)
    {
        Node *p = new Node;
        int count = 0;
        while(p->next != NULL)
        {
            if(p->key = v)
            {
                delete p;
                count++;
                return count;
            }
        }
    }
    void Write()
    {
        string data;
        fstream file;
        file.open("D:\\plik2.txt", ios::out);
        Node *p = head;
        while(p->next != NULL)  
        {
            p = p->next;
            int wartosc = p->key;
            file<<wartosc;
        }
        file.close();
    }

    void Read()
    {
        string data;
        fstream file;
        file.open("D:\\plik.txt", ios::in);
        Node *p = head;
        for(int i=0; i<counter; i++)
        {
            getline(file, data);
            int result = atoi(data.c_str());
            p->key = result;
            p = p->next;
        }
        file.close();
    }


};

int main()
{
    List a;
    a.Read();
    a.Addafter(a.head, 3);
    a.Delete(5);
    a.size(a.head);
    system("PAUSE");
    return 0;
}

0 个答案:

没有答案