实验二双链表
来源:互联网 发布:淘宝怎么设置员工账号 编辑:程序博客网 时间:2024/05/29 10:03
一、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
源代码为:
#include<iostream> using namespace std; template <typename T> class Node { public: T data; Node<T> *prior; Node<T> *next; }; template <typename T> class DLL { public: DLL(); DLL(T score[], int n); //有参构造函数 ~DLL(); //析构函数 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 <typename T> DLL<T>::DLL(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 <typename T> DLL<T>::~DLL() { 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<typename T> int DLL<T>::Length() { Node<T> *p; int count; p=first->next; count=0; while(p!=NULL) { p=p->next; count++; } return length; } template <typename T> void DLL<T>::insert(int i,T x) { Node<T>*p,*s;int count; p=first; count=0; 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 <typename T> T DLL<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 <typename T> int DLL<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 <typename T> T DLL<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 <typename T> void DLL<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] = { 69,85,95,74,55,64,100,87 }; DLL<float>student(score, 8); cout << " 学生数据结构成绩" << endl; student.print(); cout << endl << endl << "在位置5插入成绩68,插入后结果如下:" << endl; student.insert(5,68); student.print(); cout << endl << endl << "在位置2删除成绩为:" << student.Delete(2) <<" , "<< "删除后结果如下:" << endl; student.print(); cout << endl << endl << "位置4的成绩为:" << student.get(4) << endl; cout << endl << endl << "成绩74所在位置为:" << student.locate(74) << endl; }
阅读全文
0 0
- 实验二双链表
- 实验二双链表
- 实验二双链表
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验
- 实验。。
- 实验
- 实验
- 实验
- 实验
- QML与c++交互方法
- 前端跨域及图片延迟加载
- php三行代码解决输入地址给出经纬度
- Spring Integration请求https ssl地址相关配置
- windows下用intel 编译器 构建mpi并行程序
- 实验二双链表
- Oracle分页查询
- 在activity上添加Fragment及底部按钮切换
- 【项目经理之修炼(2)】《序章》项目经理就一垃圾职位
- java如何获取本机IP?
- xlistview上拉刷新和下拉加载
- 这几excel操作技巧,每一个都是大神和菜鸟的分水岭!
- iOS 3DTouch 引用
- MFC创建DLL