数据结构|创建学生成绩的双链表(实验2.3)
来源:互联网 发布:java输入输出流 编辑:程序博客网 时间:2024/06/05 00:11
一、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
代码如下:
#include<iostream> using namespace std; template <class T> struct Node { T data; Node<T> *prior,*next; }; template <class T> class D { public: D(); D(T score[], int n); //有参构造函数 ~D(); //析构函数 int Length(); //返回单链表长度 void insert(int i, T x); //在位置i插入元素 T get(int i); //按位查找 int locate(T x); //按值查找 T Delete(int i); //删除操作 void print(); //遍历操作 private: Node<T> *first; //双链表的头指针 int length; }; template <class T> D<T>::D(T score[], int n) { length=0; first = new Node<T>; first->next = NULL; first->prior = NULL; for (int i = 0; i<n; i++) { Node<T> *s = new Node<T>; s->data = score[i]; s->next = first->next; first->next = s; } } template <class T> D<T>::~D() { while (first->next!=first->prior) { Node<T> *temp = first; first->prior->next = first->next; first->next -> prior = first->prior; //头指针后移 first = first->next; delete temp; } delete first; } template<class T> int D<T>::Length() { Node<T> *p; int count; p=first->next; count=0; while(p!=NULL) { p=p->next; count++; } return length; } template <class T> void D<T>::insert(int i,T x) { Node<T>*p,*s;int count=0; p=first; while(p!=NULL&&count<i-1) { p=p->next; count++; } if(p==NULL) throw"位置"; else { s=new Node<T>; s->data=x; s->next=p->next; p->next=s; } } template <class T> T D<T>::get(int i) { Node<T> *p;int count; count = 1; p = first->next; while (p != NULL&&count<i) { p = p->next; count++; } if (p == NULL)throw"位置非法"; else return p->data; } template <class T> int D<T>::locate(T x) { Node<T> *p; int count; p = first->next; count = 1; while (p!= NULL) { if (p->data == x) return count; p = p->next; count++; } return 0; } template <class T> T D<T>::Delete(int i) { Node<T> *p,*q; p = first->next; int count, x; count = 1; while (p != NULL&&count<i-1) { p = p->next; count++; } if (p == NULL || p->next == NULL) throw"位置非法"; else { q = p->next; x=q->data; if (p->next != NULL) { if(q->next!=NULL) q->next->prior = p; else { p->next=NULL; p->next = q->next; delete q; q = NULL; return x; } } p->next = q->next; delete q; q = NULL; return x; } } template <class T> void D<T>::print() { Node<T> *p; p = first->next; while (p->next != NULL) { cout << p->data << " "; p = p->next; } cout << p->data << endl; } void main() { float score[8] = {88,89.5,89,79.5,96.5,76,100,88.5 }; D<float>student(score, 8); cout << " 学生的所有成绩如下 " << endl; student.print(); cout << endl << "删除在位置6的成绩如下 :" << student.Delete(6) <<" , "<< "删除后结果如下:" << endl; student.print(); cout << endl << "在位置7插入成绩99,插入后结果如下:" << endl; student.insert(7,99); student.print(); cout << endl << "位置5的成绩为:" << student.get(5) << endl; cout << endl << "成绩100所在位置为:" << student.locate(100) << endl; }
运行结果如下:
阅读全文
0 0
- 数据结构|创建学生成绩的双链表(实验2.3)
- 数据结构|创建学生成绩的双链表(实验2.3)
- 数据结构|创建学生成绩的顺序表(实验2.1)
- 数据结构|创建学生成绩的单链表(实验2.2)
- 数据结构|创建学生成绩的间接寻址(实验2.5)
- 数据结构|创建学生成绩的顺序表(实验2.1)
- 数据结构|创建学生成绩的单链表(实验2.2)
- 数据结构|创建学生成绩的间接寻址(实验2.5)
- 数据结构|创建学生成绩的静态链表(实验2.4)
- 数据结构|创建学生成绩的静态链表(实验2.4)
- 实验二 创建学生成绩-双链表
- 创建学生成绩的双链表
- (2013-4-1)数据结构实验一:打印成绩最高和最低的学生信息
- 创建学生成绩双链表
- 终于完成~《数据结构》实验二:线性表的实验(实现一个N个学生成绩的顺序表)
- 实验二 创建学生成绩-顺序表
- 实验二 创建学生成绩-单链表
- 实验二 创建学生成绩-间接寻址
- Struts2之HelloWolrd
- 统计单词(包括中文)出现的次数
- 使用Jsp输出Person类的成员信息(无数据库连接)
- display内联属性
- 虚拟机控制及基础linux使用
- 数据结构|创建学生成绩的双链表(实验2.3)
- hdu 3820 最小割
- CMM语言解释器构造实践(三)——基于状态转换图的词法分析器
- 单元测试范例
- Session的使用
- 一台电脑添加多个git账户
- HTML标签的书写和嵌套规范
- JavaScript函数传参
- Ubuntu与Windows 使用pscp传输文件