此程序所写链表,删除功能只能在表尾每次删除一个学生,可在任意合理范围内根据key值插入学生,并打印消息。在查找某个学生位置时,可以考虑写一个search函数,本文在各个函数内直接查找,代码略显冗余。后期有空改进。
list.h
#ifndef LIST_H_
#define LIST_H_
#include "string"
#include "iostream"
using namespace std;
typedef struct info
{
string name;
string number;
}information;
typedef struct stu
{
struct stu* prev;
int key;
information name_num;
struct stu* next;
}student;
class list
{
public:
list();
~
list();
void insert(
string name,
string number,
int k);
void deletee();
void show()
const;
private:
student* head;
int key;
};
#endif
list.cpp
list::
list()
{
head=nullptr;
key=
0;
}
void
list::insert(string name,string number,int k)
{
++key;
if(k<
1 || k>key)
{
cout<<
"无此位置,请重新输入!";
return;
}
else if(k==
1)
{
if(head==nullptr)
{
head=
new student;
(*head).key=key;
(*head).name_num.name=name;
(*head).name_num.number=number;
(*head).prev=nullptr;
(*head).next=nullptr;
}
else
{
(*head).prev=
new student;
(*(*head).prev).next=head;
(*(*head).prev).prev=nullptr;
(*(*head).prev).key=k;
(*(*head).prev).name_num.name=name;
(*(*head).prev).name_num.number=number;
head=(*head).prev;
student*
empty=head;
for(int i=
0;i<key;++i)
{
(*
empty).key=i+
1;
empty=(*
empty).next;
}
}
}
else if(k>
1 && k==key)
{
student*
empty = head;
while((*
empty).next!=nullptr)
{
empty=(*
empty).next;
}
(*
empty).next=
new student;
(*(*
empty).next).name_num.name=name;
(*(*
empty).next).name_num.number=number;
(*(*
empty).next).key=key;
(*(*
empty).next).next=nullptr;
(*(*
empty).next).prev=
empty;
}
else
{
student*
empty = head;
while((*
empty).key!=k-
1)
{
empty=(*
empty).next;
}
student* dempty =(*
empty).next;
(*
empty).next=
new student;
(*(*
empty).next).name_num.name=name;
(*(*
empty).next).name_num.number=number;
(*(*
empty).next).key=key;
(*(*
empty).next).prev=
empty;
(*(*
empty).next).next=dempty;
(*dempty).prev=(*
empty).next;
empty=head;
for(int i=
0;i<key;++i)
{
(*
empty).key=i+
1;
empty=(*
empty).next;
}
}
}
void
list::deletee()
{
if(key==
0)
{
cout<<
"No student can be delete!"<<endl;
}
else if(key==
1)
{
delete head;
head=nullptr;
--key;
}
else
{
student*
empty = head;
while((*
empty).next!=nullptr)
{
empty=(*
empty).next;
}
empty=(*
empty).prev;
delete (*
empty).next;
(*
empty).next=nullptrL;
--key;
}
}
void
list::show( )
const
{
if(key==
0)
cout<<
"No student!"<<endl;
else
{
student*
empty = head;
cout<<
"key: "<<(*
empty).key<<
" 姓名: "<<(*
empty).name_num.name<<
" 学号: "<<(*
empty).name_num.number<<endl;
while((*
empty).next!=nullptr)
{
empty=(*
empty).next;
cout<<
"key: "<<(*
empty).key<<
" 姓名: "<<(*
empty).name_num.name<<
" 学号: "<<(*
empty).name_num.number<<endl;
}
}
}
main.h
#include "list.h"
int main()
{
list student_list
student_list
.show()
cout<<endl
student_list
.insert(
"范冰冰",
"010308",
1)
student_list
.show()
cout<<endl
student_list
.insert(
"黄晓明",
"010305",
2)
student_list
.show()
cout<<endl
student_list
.insert(
"赵丽颖",
"010302",
1)
student_list
.show()
cout<<endl
student_list
.insert(
"吴彦祖",
"010301",
2)
student_list
.show()
cout<<endl
student_list
.deletee()
student_list
.show()
cout<<endl
student_list
.deletee()
student_list
.show()
cout<<endl
student_list
.insert(
"古天乐",
"010312",
3)
student_list
.show()
cout<<endl
return
0
}
运行结果:
转载请注明原文地址: https://ju.6miu.com/read-21417.html