单链表的实现

来源:互联网 发布:最基本的网络通信协议 编辑:程序博客网 时间:2024/05/18 01:42

#include<iostream>
#include<string>
using namespace std;
struct Student
{
int num;
string name;
float score;
Student *next;
};
Student* create(int n)
{
cout << "请输入学生学号姓名成绩" << endl;
Student *student, *tail = NULL, *head = NULL;
for (int i = 0; i<n; i++)
{
student = new Student;
cin >> student->num >> student->name >> student->score;
student->next = NULL;
if (tail == NULL)
{
head = student;
tail = student;//指向student;
}
else
{
tail->next = student;//与上一个结点相接
tail = student;
}
}

return head;
}
void print(Student *head)
{
Student*p; p = head;
do{
cout << p->num<<" " << p->name<<" " << p->score << endl;
p = p->next;
} while (p != NULL);
}
Student* insert(Student*head)//性能低下
{
int m;
cout << "请输入要插入学生的位置如01" << endl;
cin >> m;
Student *p,*q=NULL; p = head;
do{
if (p->num == m){ q = p; break; }//记录p
p = p->next;
} while (p != NULL);
Student *student1 = new Student;
cout << "请输入数据" << endl;
cin >> student1->num >> student1->name >> student1->score;
student1->next = q->next;//插入到发现结点的后面
q->next = student1;
return head;
//不用Null断开!
}
Student* del(Student*head)
{
cout << "请输入要删除的学生的学号" << endl;
int k; cin >> k;
Student *p1, *p2=NULL;//删除当前节点
p1 = head;
if (p1->num == k)//如果要删除的是头节点!
{
p2 = p1->next;
delete head;
head = p2;
}
else {
while (p1->num != NULL&&p1->num != k)
{
p2 = p1; p1 = p1->next;
}
p2->next = p1->next;
delete p1;
}
return head;
}
int main()
{
cout << "请输入学生数目" << endl;
int n; cin >> n;
Student*head;
head=create(n);
insert(head);
print(head);
del(head);
print(head);
return 0;
}


0 0
原创粉丝点击