-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain_linked_list.cpp
More file actions
167 lines (142 loc) · 3.92 KB
/
Copy pathmain_linked_list.cpp
File metadata and controls
167 lines (142 loc) · 3.92 KB
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
156
157
158
159
160
161
162
163
164
165
166
//to compile, do g++ -c main_linked_list.cpp
//to link, do g++ -o main_linked_list main_linked_list.o
#include <iostream>
using namespace std;
struct residue
{
//char *name;
string name;
int num;
residue *next;
};
struct node
{ char name[20]; // Name of up to 20 letters
int age; // D.O.B. would be better
float height; // In metres
node *nxt; // Pointer to next node
};
node *start_ptr = NULL;
node *current; // Used to move along the list
int option = 0;
void add_node_at_end()
{ node *temp, *temp2; // Temporary pointers
// Reserve space for new node and fill it with data
temp = new node;
cout << "Please enter the name of the person: ";
cin >> temp->name;
cout << "Please enter the age of the person : ";
cin >> temp->age;
cout << "Please enter the height of the person : ";
cin >> temp->height;
temp->nxt = NULL;
// Set up link to this node
if (start_ptr == NULL)
{ start_ptr = temp;
//current = start_ptr;
}
else
{ temp2 = start_ptr;
// We know this is not NULL - list not empty!
while (temp2->nxt != NULL)
{ temp2 = temp2->nxt;
// Move to next link in chain
}
temp2->nxt = temp;
}
current=temp;
}
void display_list()
{ node *temp;
temp = start_ptr;
cout << endl;
if (temp == NULL)
cout << "The list is empty!" << endl;
else
{ while (temp != NULL)
{ // Display details for what temp points to
cout << "Name : " << temp->name << " ";
cout << "Age : " << temp->age << " ";
cout << "Height : " << temp->height;
if (temp == current)
cout << " <-- Current node";
cout << endl;
temp = temp->nxt;
}
cout << "End of list!" << endl;
}
}
void delete_start_node()
{ node *temp;
temp = start_ptr;
start_ptr = start_ptr->nxt;
delete temp;
}
void delete_end_node()
{ node *temp1, *temp2;
if (start_ptr == NULL)
cout << "The list is empty!" << endl;
else
{ temp1 = start_ptr;
if (temp1->nxt == NULL)
{ delete temp1;
start_ptr = NULL;
}
else
{ while (temp1->nxt != NULL)
{ temp2 = temp1;
temp1 = temp1->nxt;
}
delete temp1;
temp2->nxt = NULL;
}
}
}
void move_current_on ()
{ if (current->nxt == NULL)
cout << "You are at the end of the list." << endl;
else
current = current->nxt;
}
void move_current_back ()
{ if (current == start_ptr)
cout << "You are at the start of the list" << endl;
else
{ node *previous; // Declare the pointer
previous = start_ptr;
while (previous->nxt != current)
{ previous = previous->nxt;
}
current = previous;
}
}
int main()
{
residue *temp;
temp=new residue;
cout << "Please enter the name of the residue: ";
cin>>temp->name;
start_ptr = NULL;
do
{
display_list();
cout << endl;
cout << "Please select an option : " << endl;
cout << "0. Exit the program." << endl;
cout << "1. Add a node to the end of the list." << endl;
cout << "2. Delete the start node from the list." << endl;
cout << "3. Delete the end node from the list." << endl;
cout << "4. Move the current pointer on one node." << endl;
cout << "5. Move the current pointer back one node." << endl;
cout << endl << " >> ";
cin >> option;
switch (option)
{
case 1 : add_node_at_end(); break;
case 2 : delete_start_node(); break;
case 3 : delete_end_node(); break;
case 4 : move_current_on(); break;
case 5 : move_current_back();
}
}
while (option != 0);
}