Linked List Operations

So I've got a linked list data base using templates which compiles fine and lets me print out a list of all states and lets me search for a person and print all that persons data(since these methods work, I left them out below to save space) Below I have find_state, print_person, and print_people_in_state methods, what I need them to collectively be able to do is to (given a user input of state) print out the info on all the people from that particular state. However right now when I run it, nothing happens. How can I fix this. Any help would be appreciated. Thanks

-if you want to run the code yourself here is a link to the file that i named data.txt (http://rabbit.eng.miami.edu/class/een118/labs/152/dbfile1.txt)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
using namespace std;


struct person
{
    int dob,ss_number;
    string fname, lname,state;
    
    person()
    { }
    person(int a, int b, string c, string d, string e)
    {dob=a; ss_number=b; fname=c; lname=d; state=e;}
};


struct state
{
    string sname;
    person*P;
    
    
    state()
    {}
    state(string a)
    {sname=a;}
};

template<typename T>struct Link
{
    T*data;
    Link*extradata;
    Link*next;
    
    Link()
    {}
    Link(T*a,Link<T>*C=NULL)
    {
        data=a;
        next=C;
        
    }
    
};
template<typename T>
struct List
{int length;
    Link<T>*Head,*tail;
    List(Link<T>*h=NULL, Link<T>*t=NULL)
    {
        Head=h;
        tail=t;
        length=0;
    }
    
    void add(T*object)
    {
        {   if (Head == NULL && tail == NULL)
        {   Link<T> * newlink = new Link<T>(object);
            Head = newlink;
            tail = Head;  }
        else
        {   Link<T> * newlink = new Link<T>(object);
            tail->next = newlink;
            tail=newlink;} }
    }
void print_people_in_state(string search)
{

   Link<state>*temp=Head;
   if(temp!==NULL)
       {
          if(temp->data->P->state==search)
             {
               cout<<temp->data->P->fname<<endl;
              }
       //  temp=temp->next;
}}




};
List<person>*person_from_file(string file)//reads file and creates linked list of people
{
    List<person>* newlist=new List<person>();
    //        Link<T> * head=NULL;
    //        Link<T> * temp=NULL;
    ifstream fin;
    fin.open("data.txt");
    if (fin.fail())
        cout<<"file not found\n";
    if (!fin.fail())
    {
        while(true)
        {
            int a,b;
            string c,d,e;
            fin>>a>>b>>c>>d>>e;
            if (fin.fail())break;
            person * p=new person(a,b,c,d,e);
            newlist->add(p);
            
            
        }
    }
    else
        cout<<"Can't open file";
    fin.close();
    return newlist;
}
List<state>*state_from_file(string file)//reads file and creates linked list of states
{
    List<state>* newlist=new List<state>();
    //        Link<T> * head=NULL;
    //        Link<T> * temp=NULL;
    ifstream fin;
    fin.open("data.txt");
    if (fin.fail())
        cout<<"file not found\n";
    if (!fin.fail())
    {
        while(true)
        {
            int a,b;
            string c,d,e;
            fin>>a>>b>>c>>d>>e;
            if (fin.fail())break;
            state * s=new state(e);
            newlist->add(s);
            
            
        }
    }
    else
        cout<<"Can't open file";
    fin.close();
    return newlist;
}

int main()
{List<person>*A = person_from_file("data.txt");
 List<state> *B= state_from_file("data.txt");
   
  
    
       B->print_people_in_state("TX");
    
    
    
    return 0;
}
Last edited on
Those functions should not exist. What if your linked list template was instantiated with T == double? Would it make sense to search a list of numbers for a specific state, or print the people in the numbers? The point of generic programming is that you should not be concerned with the objects you are dealing with.
Sorry I accidentally uploaded my old code. I just changed it to where it's only one function. However it still doesnt work. It compiles but gets a seg fault
I still see "print_people_in_state" inside your template class. As I said, this is wrong. It would be fine as a free function (that is, not a member of the class).
Topic archived. No new replies allowed.