线性表C++类实现
2016-03-03 16:40
567 查看
线性表的定义:线性表是具有相同数据类型的n(n≥0)个数据元素有限序列。除第一个元素元素外都有前驱,除最有一个元素外都有后继。
存储是顺序存储成为顺序表,链式存储成为单链表。一下分别对顺序表和单链表用C++类来实现。
顺序表:
静态分配内存
动态分配内存
可更具具体功能的需要,进行修改。
下面以动态分配内存为例实现一些功能
单链表的实现看如下代码即可明白:
本段代码参考的是:http://blog.csdn.net/changshu1/article/details/47251969
存储是顺序存储成为顺序表,链式存储成为单链表。一下分别对顺序表和单链表用C++类来实现。
顺序表:
静态分配内存
template <typename ElemType> class List { public: List(); ~List(); private: ElemType data[MaxSize]; //顺序表数组 int length; //顺序表当前长度 static int MaxSize=50; //数组的最大容量 };
动态分配内存
template <typename ElemType> class List { public: List(); ~List(); private: ElemType * data; //顺序表动态分配数组指针 int length; //顺序表当前长度 int MaxSize; //数组当前最大容量 static int InitSize = 50; //表长初始定义长度 };
可更具具体功能的需要,进行修改。
下面以动态分配内存为例实现一些功能
#include <iostream> using namespace std; template <typename ElemType> class List { public: List(int n); //构造函数进行初始化 ~List(); void ElemInsert(ElemType t,int i); void ElemDelete(int i); void ShowList(); private: ElemType * data; //顺序表动态分配数组指针 int length; //顺序表当前长度 int MaxSize; //数组的当前最大容量 static const int InitSize = 50; //表长初始定义长度 }; template <typename ElemType> List<ElemType>::List(int n) { data = new ElemType[InitSize]; length = 0; MaxSize = InitSize; for (int i = 0; i < n; i++) { cout << "Input: data[" << i << "] = "; cin >> data[i]; length++; } } template <typename ElemType> List<ElemType>::~List() { delete[]data; } template <typename ElemType> void List<ElemType>::ElemInsert(ElemType t, int i) { if (i<1 || i>length + 1) { cout << "error"; return; } if (length>=MaxSize) { cout << "error"; return; } for (int j = length; j >= i; j--) data[j] = data[j - 1]; data[i - 1] = t; length++; } template <typename ElemType> void List<ElemType>::ElemDelete(int i) { if (i<1 || i>length) { cout << "error"; return; } for (int j = i; j < length; j++) data[j - 1] = data[j]; length--; } template <typename ElemType> void List<ElemType>::ShowList() { for (int i = 0; i < length; i++) { cout << data[i] << " "; } cout << endl; } int main() { List<int> one(4); one.ShowList(); one.ElemInsert(3, 2); //在第二个位置插入3 one.ShowList(); one.ElemDelete(2); //删除第二个元素 one.ShowList(); return 0; }运行结果如下:
单链表的实现看如下代码即可明白:
#include <iostream> using namespace std; template<typename ElemType> class LinkedNode { public: void CreateList(); // 创建链表 void ShowList(); //显示链表 void ReverseList(); //逆置链表 void DeleteElem(ElemType t); //删除t private: ElemType data; LinkedNode * next; }; template<typename ElemType> void LinkedNode<ElemType>::CreateList() { int n; cin >> n; LinkedNode * p, *q; p = this; while (n--) { q = new LinkedNode; cin >> q->data; p->next = q; p = q; } p->next = nullptr; } template<typename ElemType> void LinkedNode<ElemType>::ShowList() { LinkedNode *p; p = this->next; while (p != nullptr) { cout << p->data << " "; p = p->next; } cout << endl; } template<typename ElemType> void LinkedNode<ElemType>::ReverseList() { LinkedNode *p, *q, *t; p = this->next; if (p == nullptr) return; q = p->next; while (q != nullptr) //p不动一直是最后一个 { p->next = q->next; //保存下个Q q->next = this->next; //插入Q this->next = q; q = p->next; //迭代下一个 } this->next = p; } template<typename ElemType> void LinkedNode<ElemType>::DeleteElem(ElemType t) { LinkedNode *p,*q; p = this; q = this->next; while (q!=nullptr) { if (q->data==t) { p->next = q->next; delete q; q = p->next; } else { p = p->next; q = q->next; } } } template<typename ElemType> void ACM1004() { LinkedNode<ElemType> *p = new LinkedNode<ElemType>; p->CreateList(); p->ShowList(); p->ReverseList(); p->ShowList(); ElemType t; cin >> t; p->DeleteElem(t); p->ShowList(); } int main() { ACM1004<int>(); ACM1004<char>(); ACM1004<double>(); return 0; }
本段代码参考的是:http://blog.csdn.net/changshu1/article/details/47251969
相关文章推荐
- opencl:改造C++接口增加对内存编译(compile)的支持
- _beginThread如何传递多个参数
- [C++] C++学习代码
- 1092. To Buy or Not to Buy (20)
- 阿里云服务器运行VS2013项目问题-C++操作数据库
- c/c++静态区 常量区 栈 堆
- C++ 128位 AES加密算法
- 2:编写虚幻引擎中的UC和C++代码
- hdoj 2076 时针分针夹角C语言实现
- C++链表(single-linked list)
- VC++2010工程中加入SplashScreen
- 从汇编层面深度剖析C++虚函数
- C语言(一)
- C++中const用法总结
- 2014华为上机题C++编程
- c++ primer 课后习题12.24// 12.24.cpp : 定义控制台应用程序的入口点。
- C++ typename的起源与用法
- C/C++,关键字typeof的用法
- 12.23.cpp : 定义控制台应用程序的入口点。
- C++学习笔记(1)<unfinshed>