用单链表实现学生成绩管理
2017-11-26 23:54
274 查看
数据结构实验二:线性表综合实验
1、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
2、实验内容
.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
3、代码
#include <iostream>
using namespace std;
template <class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template <class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataType a[], int n);
~LinkList();
int Length();
DataType Get(int i);
int Locate(DataType x);
void Insert(DataType x, int i);
DataType Delete(int i);
void PrintList();
private:
Node<DataType> * first;
};
template <class DataType>
void LinkList<DataType> ::PrintList()
{
Node<DataType>*p=NULL;
p = first->next; //工作指针P初始化
while (p != NULL)
{
cout << p->data<<" ";
p = p->next;
}
}
template <class DataType>
int LinkList<DataType>::Length()
{
Node<DataType>*p = NULL;
p = first->next;
int count = 0;
while (p != NULL)
{
p = p->next;
count++;
}
return count;
}
template &l
a4cc
t;class DataType>
DataType LinkList<DataType>::Get(int i)
{
Node<DataType>*p = NULL;
p = first->next;
int count = 1;
while (p!=NULL&&count<i)
{
p = p->next;
count++;
}
if (p == NULL) throw"输入位置异常";
else
{
return p->data;
}
}
template <class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType>*p = NULL;
p = first->next;
int count = 1;
while (p != NULL)
{
if (p->data == x)
return count;
p = p->next;
count++;
}
return 0;
}
template <class DataType>
void LinkList<DataType>::Insert(DataType x, int i)
{
Node<DataType>*p,*s;
p = first;
int count = 0;
while (p != NULL && count < i - 1)
{
p = p->next;
count++;
}
if (p == NULL)throw "插入位置异常";
else
{
s = new Node<DataType>;
s->data = x;
s->next = p->next;
p->next = s;
}
}
template <class DataType>
LinkList <DataType>::LinkList()
{
first = new Node<DataType>;
first->next = NULL;
}
template <class DataType>
LinkList<DataType>::LinkList(DataType a[], int n) //尾插法
{
Node<DataType> *s, *r;
first = new Node<DataType>;
r = first;
for (int i = 0; i < n; i++)
{
s = new Node<DataType>;
s->data = a[i];
r->next = s;
r= s;
}
r->next = NULL;
}
template <class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<DataType>*p;
p = first;
int count = 0;
while (p != NULL&&count < i - 1)
{
p=p->next;
count++;
}
if (p == NULL || p->next == NULL)
throw "删除位置异常";
else
{
Node<DataType>*q = NULL;
q = p->next;
DataType x = q->data;
p->next = q->next;
delete q;
return x;
}
}
template <class DataType>
LinkList <DataType>::~LinkList()
{
Node<DataType>*q = NULL;
while (first != NULL)
{
q = first;
first = first->next;
delete q;
}
cout << "链表已成功删除。" <<endl;
}
int main()
{
int num;
cout << "请输入学生人数:";
cin >> num;
int studemo[] = { 50,60,70,80,90 };
LinkList<int> demo(studemo, num);
demo.PrintList(); //展示学生成绩
cout << "查找第三名学生成绩:" << demo.Get(3) << endl;
cout << "查找成绩为90的学生的位置:" << demo.Locate(90) << endl;
cout << "在第四与第五之间插入成绩85:"<<endl;
cout << "结果为:";
demo.Insert(85, 5);
demo.PrintList();
cout<<endl;
cout << "链表总长为:";
cout << demo.Length() << endl;
cout << endl;
cout << "删除第6位成绩:";
cout << demo.Delete(6)<<endl;
cout << "结果为:";
demo.PrintList();
cout << endl;
cout << "析构链表"<<endl;
demo.~LinkList();
return 0;
}
4、运行结果
5、实验总结
本次实验有些难度,主要是对存储结构不熟悉,指针掌握得不好,调试过程频繁出现错误。通过翻阅书本,上网查找,反反复复才得以成功运行。
1、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
2、实验内容
.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
3、代码
#include <iostream>
using namespace std;
template <class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template <class DataType>
class LinkList
{
public:
LinkList();
LinkList(DataType a[], int n);
~LinkList();
int Length();
DataType Get(int i);
int Locate(DataType x);
void Insert(DataType x, int i);
DataType Delete(int i);
void PrintList();
private:
Node<DataType> * first;
};
template <class DataType>
void LinkList<DataType> ::PrintList()
{
Node<DataType>*p=NULL;
p = first->next; //工作指针P初始化
while (p != NULL)
{
cout << p->data<<" ";
p = p->next;
}
}
template <class DataType>
int LinkList<DataType>::Length()
{
Node<DataType>*p = NULL;
p = first->next;
int count = 0;
while (p != NULL)
{
p = p->next;
count++;
}
return count;
}
template &l
a4cc
t;class DataType>
DataType LinkList<DataType>::Get(int i)
{
Node<DataType>*p = NULL;
p = first->next;
int count = 1;
while (p!=NULL&&count<i)
{
p = p->next;
count++;
}
if (p == NULL) throw"输入位置异常";
else
{
return p->data;
}
}
template <class DataType>
int LinkList<DataType>::Locate(DataType x)
{
Node<DataType>*p = NULL;
p = first->next;
int count = 1;
while (p != NULL)
{
if (p->data == x)
return count;
p = p->next;
count++;
}
return 0;
}
template <class DataType>
void LinkList<DataType>::Insert(DataType x, int i)
{
Node<DataType>*p,*s;
p = first;
int count = 0;
while (p != NULL && count < i - 1)
{
p = p->next;
count++;
}
if (p == NULL)throw "插入位置异常";
else
{
s = new Node<DataType>;
s->data = x;
s->next = p->next;
p->next = s;
}
}
template <class DataType>
LinkList <DataType>::LinkList()
{
first = new Node<DataType>;
first->next = NULL;
}
template <class DataType>
LinkList<DataType>::LinkList(DataType a[], int n) //尾插法
{
Node<DataType> *s, *r;
first = new Node<DataType>;
r = first;
for (int i = 0; i < n; i++)
{
s = new Node<DataType>;
s->data = a[i];
r->next = s;
r= s;
}
r->next = NULL;
}
template <class DataType>
DataType LinkList<DataType>::Delete(int i)
{
Node<DataType>*p;
p = first;
int count = 0;
while (p != NULL&&count < i - 1)
{
p=p->next;
count++;
}
if (p == NULL || p->next == NULL)
throw "删除位置异常";
else
{
Node<DataType>*q = NULL;
q = p->next;
DataType x = q->data;
p->next = q->next;
delete q;
return x;
}
}
template <class DataType>
LinkList <DataType>::~LinkList()
{
Node<DataType>*q = NULL;
while (first != NULL)
{
q = first;
first = first->next;
delete q;
}
cout << "链表已成功删除。" <<endl;
}
int main()
{
int num;
cout << "请输入学生人数:";
cin >> num;
int studemo[] = { 50,60,70,80,90 };
LinkList<int> demo(studemo, num);
demo.PrintList(); //展示学生成绩
cout << "查找第三名学生成绩:" << demo.Get(3) << endl;
cout << "查找成绩为90的学生的位置:" << demo.Locate(90) << endl;
cout << "在第四与第五之间插入成绩85:"<<endl;
cout << "结果为:";
demo.Insert(85, 5);
demo.PrintList();
cout<<endl;
cout << "链表总长为:";
cout << demo.Length() << endl;
cout << endl;
cout << "删除第6位成绩:";
cout << demo.Delete(6)<<endl;
cout << "结果为:";
demo.PrintList();
cout << endl;
cout << "析构链表"<<endl;
demo.~LinkList();
return 0;
}
4、运行结果
5、实验总结
本次实验有些难度,主要是对存储结构不熟悉,指针掌握得不好,调试过程频繁出现错误。通过翻阅书本,上网查找,反反复复才得以成功运行。
相关文章推荐
- 使用C++结合文件操作和链表实现学生成绩管理系统
- 用链表写的学生管理系统 成绩的录入与查询都已经是实现了
- 学生成绩管理系统课程设计(C语言,链表实现)
- 学生成绩管理系统(链表的实现)
- c++链表实现学生成绩管理系统(简易版)
- 链表《5》使用链表实现学生成绩管理系统
- 学生成绩管理系统链表实现
- c用链表实现学生成绩管理系统 MIS
- C语言链表实现的简易学生成绩管理系统
- 链表实现学生成绩管理系统
- 数据结构——学生成绩管理系统的链表实现
- 用链表写的学生管理系统 成绩的录入与查询都已经是实现了
- 一个简单的学生成绩管理程序(二叉树实现)
- 使用单向链表实现学生信息管理系统
- 用文件和链表实现学生信息管理
- 学生成绩管理系统(java实现)
- 数据结构之链表的实现-------C++课程设计-----学生选课管理系统
- 数据结构:单链表:学生成绩管理系统
- 基于链表的学生成绩管理系统——C++二进制文件读写string对象时出现的错误
- <C语言>使用一个二维数组实现学生姓名管理系统,要求不能使用链表