《数据结构》线性表:链式存储结构实现示例代码二(插入、删除、查找)
2014-08-16 00:26
816 查看
本例,以班级学生成绩为例,实现顺序表的链式存储结构的操作功能实现。
大家分析一下程序运行结果吧。可以尝试将其改成其它具体数据类型。比如说,将学生信息加上学号等信息。
#include<iostream> //引用输入输出流库函数的头文件 /*************************************/ /***** 声明模板类 *****/ /***** 可以单独放在一个头文件中 *****/ /*************************************/ template <class DataType> struct Node { DataType data; Node<DataType> *next; }; template <class DataType> class LinkList { public: LinkList( ); //构造函数,含头结点的空链表 LinkList(DataType a[ ], int n); //构造函数,建立有n个元素的单链表 ~LinkList( ); //析构函数 int Locate(DataType x); //按值查找。在单链表中查找值为x的元素序号 void Insert(int i, DataType x); //插入操作,第i个位置插入元素值为x的结点 DataType Delete(int i); //删除操作,在单链表中删除第i个结点 void PrintList( ); //遍历操作,按序号依次输出各元素 private: Node<DataType> *first; //单链表的头指针 }; /********************************/ /***** 定义模板类操作函数 *****/ /***** 可以单独放在源文件中 *****/ /********************************/ 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> *r, *s; 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; //将结点s插入到终端结点之后 } r->next = NULL; //单链表建立完毕,将终端结点的指针域置空 } template <class DataType> LinkList<DataType> :: ~LinkList( ) { Node<DataType> *q; while (first != NULL) //释放单链表的每一个结点的存储空间 { q = first; //暂存被释放结点 first = first->next; // first指向被释放结点的下一个结点 delete q; } } template <class DataType> void LinkList<DataType> :: Insert(int i, DataType x) { Node<DataType> *p = first, *s; int count = 0; //工作指针p应指向头结点 while (p != NULL && count < i - 1) //查找第i - 1个结点 { p = p->next; //工作指针p后移 count++; } if (p == NULL) throw "位置"; //没有找到第i - 1个结点 else { s = new Node<DataType>; s->data = x; //申请一个结点s,其数据域为x s->next = p->next; p->next = s; //将结点s插入到结点p之后 } } template <class DataType> DataType LinkList<DataType> :: Delete(int i) { Node<DataType> *p, *q; DataType x; int count = 0; p = first; //注意工作指针p要指向头结点 while (p != NULL && count < i - 1) //查找第i-1个结点 { p = p->next; count++; } if (p == NULL || p->next == NULL) //结点p不存在或p的后继结点不存在 throw "位置"; else { q = p->next; x = q->data; //暂存被删结点 p->next = q->next; //摘链 delete q; return x; } } template <class DataType> int LinkList<DataType> :: Locate(DataType x) { Node<DataType> *p = first->next; int count = 1; //工作指针p和累加器count初始化 while (p != NULL) { if (p->data == x) return count; //查找成功,结束函数并返回序号 p = p->next; count++; } return 0; //退出循环表明查找失败 } template <class DataType> void LinkList<DataType> :: PrintList( ) { Node<DataType> *p = first->next; //工作指针p初始化 while (p != NULL) { cout << p->data<<" "; p = p->next; //工作指针p后移 } cout<<endl; } using namespace std; /********************************/ /***** C++ 主函数 *****/ /***** 选定5个学生成绩 *****/ /********************************/ void main( ) { int Score[5]={99, 93, 89, 76, 88}; LinkList<int> ScoreList(Score, 5); //会执行带参构造函数 cout<<"链表数据为:"<<endl; cout<<"执行插入操作前数据为:"<<endl; ScoreList.PrintList( ); //显示链表中所有元素 try { ScoreList.Insert(2, 65); } catch (char *s) { cout<<s<<endl; } cout<<"执行插入操作后数据为:"<<endl; ScoreList.PrintList( ); //显示链表中所有元素 cout<<"值为76的元素位置为:"; cout<<ScoreList.Locate(76)<<endl; //查找成绩76,并返回在单链表中位置 cout<<"执行删除操作前数据为:"<<endl; ScoreList.PrintList( ); //显示链表中所有元素 try { ScoreList.Delete(3); //删除第三个成绩 } catch (char *s) { cout<<s<<endl; } cout<<"执行删除操作后数据为:"<<endl; ScoreList.PrintList( ); //显示链表中所有元素 }
大家分析一下程序运行结果吧。可以尝试将其改成其它具体数据类型。比如说,将学生信息加上学号等信息。
相关文章推荐
- 《数据结构》线性表:链式存储结构实现示例代码一(构造,遍历,析构)
- java实现数据结构-线性表-顺序表,实现插入,查找,删除,合并功能
- 数据结构:链表创建、显示、求和、插入、删除等操作的代码实现
- 二叉树问题---二叉搜索树查找、插入与删除的代码实现
- 数据结构_线性表_顺序表 的创建,插入,删除,查找
- 数据结构单链表实现插入删除查找
- Oracle + Mybatis实现批量插入、更新和删除示例代码
- 今天学了线性表顺序表示,自己写了一段代码!实现了 插入和删除!这也是第一次写博客
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 【数据结构】二叉搜索树的插入,删除,查找等基本操作的实现
- 平衡二叉树的 插入 删除 查找 等功能c语言实现 数据结构
- 平衡二叉树的C语言实现(创建、插入、查找、删除、旋转)【数据结构】
- 深入理解游标Cursors,实现数据的快速查找,插入,删除,更新
- 【高质量代码实践】【链表】链表的建立,查找,删除,插入和输出
- 数据结构之简单链表(头部插入数据,查找,删除指定数据)
- 【数据结构】C语言实现链表节点的插入和删除
- sql server 临时表 查找并删除的实现代码(转)
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- 实现链表的初始化,按值查找,插入,删除
- 数据结构:线性表删除操作的php和js实现