#include <iostream>
using namespace std;
class Student
{
int student_id;
char student_name[40];
public:
friend istream& operator >> (istream& in, Student& obj)
{
in >> obj.student_id >> obj.student_name;
return in;
}
friend ostream& operator << (ostream& out, Student& obj)
{
out << obj.student_id << '\t' << obj.student_name;
return out;
}
};
struct link
{
Student data;
link *next;
};
class linklist
{
link *firstPtr;
link *lastPtr;
public:
linklist() { firstPtr = lastPtr = NULL; }
void addFront (Student obj);
void addBack (Student obj);
void delFront();
void delBack();
void showItem();
};
void linklist::addFront (Student obj)
{
link *newPtr = new link;
newPtr->data = obj;
if (firstPtr == NULL) {
firstPtr = lastPtr = newPtr;
lastPtr->next = NULL;
}
else {
newPtr->next = firstPtr;
firstPtr = newPtr;
}
}
void linklist::addBack (Student obj)
{
link *newPtr = new link;
newPtr->data = obj;
if (firstPtr == NULL) {
firstPtr = lastPtr = newPtr;
lastPtr->next = NULL;
}
else {
lastPtr->next = newPtr;
lastPtr = newPtr;
lastPtr->next = NULL;
}
}
void linklist::delFront()
{
link *tempPtr = firstPtr;
if (firstPtr == NULL)
return;
else {
firstPtr = firstPtr->next;
delete tempPtr;
}
}
void linklist::delBack()
{
link *tempPtr = lastPtr;
if (firstPtr == NULL)
return;
else {
if (firstPtr == lastPtr)
firstPtr = lastPtr = NULL;
else {
link *currentPtr = firstPtr;
while(currentPtr->next != lastPtr)
currentPtr = currentPtr->next;
lastPtr = currentPtr;
lastPtr->next = NULL;
}
}
delete tempPtr;
}
void linklist::showItem()
{
link *currentPtr = firstPtr;
while( currentPtr != NULL)
{
cout << currentPtr->data << endl;
currentPtr = currentPtr->next;
}
}
int main()
{
Student studata;
linklist ls;
char n;
cout << "1.插入第一項\n2.插入最後項\n"
<< "3.刪除第一項\n4.刪除最後項\n"
<< "0.結束\n";
while(1)
{
cout << "請選擇(1-4 或 0): ";
cin >> n;
switch (n)
{
case '1':
cout << "請輸入學號與姓名:" ;
cin >> studata;
ls.addFront(studata);
ls.showItem();
break;
case '2':
cout << "請輸入學號與姓名:" ;
cin >> studata;
ls.addBack(studata);
ls.showItem();
break;
case '3':
ls.delFront();
ls.showItem();
break;
case '4':
ls.delBack();
ls.showItem();
break;
case '0':
return 0;
}
cout << endl;
}
}