最近在重新复习C++基础知识点,复习到链表和顺序表,把之前的代码整理出来给大家参考;
我的注释算是比较详细的,所以就不做过多解释了;
贴代码的话只把具体实现贴出来,如果想要完整代码的我已经提供下载链接了哦,希望对大家有帮助:
首先是纯虚函数,两个表都继承此函数:headlist.h
#ifndef LISTHEAD_H
#defineLISTHEAD_H
#include<iostream>
usingnamespace std;
template <classElem> classlisthead{
public:
virtualvoidclear() = 0;
virtualboolinsert(Elem&,int i) = 0;
virtualboolappend(Elem&) = 0;
virtualboolremove(Elem&) = 0;
virtualvoidsetStart() = 0;
virtualvoidsetEnd() = 0;
virtualvoidprev() = 0;
virtualvoidnext() = 0;
virtualintleftLength() const = 0;
virtualintrightLength() const = 0;
virtualboolsetPos(int pos) = 0;
virtualboolgetValue(Elem&) const = 0;
virtualvoidprint() const = 0;
};
#endif
顺序表实现:
//顺序表:
#ifndef ALIST_H
#defineALIST_H
#include"listhead.h"
#include"Link.h"
template <classElem> classAlist : publiclisthead<Elem>
{
private:
int maxSize;
int listSize;
int fence;
Elem* listArray;
public:
Alist(int size);
~Alist();
boolchangeMaxSize(int newMaxsize);//改变顺序表最大长度
boolinsert(Elem& it, int num);//插入元素
boolappend(Elem& item);//在末端添加元素
boolremove(Elem& item);//删除元素
voidsetStart();//将栅栏放置在开始处
voidsetEnd();//将栅栏放置在末端
voidprev();//栅栏前移
voidnext();//栅栏后移
voidclear();//清空队列
intleftLength() const;
intrightLength() const;
boolsetPos(int pos);
boolgetValue(Elem& it) const;
voidprint() const;//打印
voidreverlist();//逆置
};
template<classElem>
Alist<Elem>::Alist(intsize){
maxSize = size;
listSize = fence = 0;
listArray = newElem[maxSize];
}
template<classElem>
Alist<Elem>::~Alist(){
delete[] listArray;
listSize = fence = 0;
listArray = newElem[maxSize];
}
template<classElem>
boolAlist<Elem>::changeMaxSize(intnewMaxsize){
Elem* newlistArray;
newlistArray = new Elem[newMaxsize];
for (int i = 0; i < newMaxsize; i++){
newlistArray[i] = listArray[i];
}
listArray = newlistArray;
if (listSize>newMaxsize){
listSize = newMaxsize;
}
if (fence > listSize){
fence = listSize;
}
maxSize = newMaxsize;
// delete[] newlistArray;
returntrue;
}
template<classElem>
boolAlist<Elem>::insert(Elem& it, intnum){
if (listSize == maxSize || num<0 || num > listSize){
returnfalse;
}
else
{
for (int i = listSize; i > num; i--){
listArray[i] = listArray[i - 1];
}
listArray[num] = it;
listSize++;
fence = num;
returntrue;
}
}
template<classElem>
boolAlist<Elem>::append(Elem& item){
if (listSize == maxSize){
returnfalse;
}
listArray[listSize++] = item;
returntrue;
}
template<classElem>
boolAlist<Elem>::remove(Elem& item){
if (rightLength() == 0){
returnfalse;
}
for (int i = 0; i < listSize; i++){
if (listArray[i] == item){
fence = i;
break;
}
}
item = listArray[fence];
for (int i = fence; i<listSize - 1; i++){
listArray[i] = listArray[i + 1];
}
listSize--;
returntrue;
}
template<classElem>
voidAlist<Elem>::setStart(){
fence = 0;
}
template<classElem>
voidAlist<Elem>::setEnd(){
fence = listSize;
}
template<classElem>
voidAlist<Elem>::prev(){
if (fence != 0)
fence--;
}
template<classElem>
voidAlist<Elem>::next(){
if (fence <= listSize - 1)
fence++;
}
template<classElem>
intAlist<Elem>::leftLength() const{
return fence;
}
template<classElem>
intAlist<Elem>::rightLength() const{
return listSize - fence;
}
template<classElem>
boolAlist<Elem>::setPos(intpos){
if ((pos >= 0) && (pos <= listSize)){
fence = pos;
}
return (pos >= 0) && (pos <= listSize);
}
template<classElem>
boolAlist<Elem>::getValue(Elem& it) const{
if (rightLength() == 0) returnfalse;
else
{
it = listArray[fence]; returntrue;
}
}
template<classElem>
voidAlist<Elem>::print() const
{
int temp = 0;
cout << "<";
while (temp<fence){ cout << listArray[temp++] << " "; }
cout << " | ";
while (temp<listSize){ cout << listArray[temp++] << " "; }
cout << " \n";
cout << listSize << " "<<fence<<endl;
}
template<classElem>
voidAlist<Elem>::reverlist(){
int i;
for (i = 0; i<listSize / 2; i++){
listArray[listSize + 1] = listArray[i];
listArray[i] = listArray[listSize - i - 1];
listArray[listSize - i - 1] = listArray[listSize + 1];
}
}
//删除列表中的数据
template<classElem>
void Alist<Elem>::clear(){
}
#endif
链表实现:
//节点
#ifndef LINK_H
#defineLINK_H
#include"listhead.h"
template <classElem> classLink{
public:
Elem element;//节点元素
Link *next;//指向下一个元素
Link(constElem& elemval,Link* nextval =NULL){
element = elemval;next = nextval;
}
Link(Link* nextval =NULL){
next = nextval;
}
};
#endif
#ifndef ALIST_L
#defineALIS_L
#include"listhead.h"
template<classElem> classLList:publiclisthead<Elem>{
private:
Link<Elem> *head;//头节点(不存数据)
Link<Elem> *tail;//尾节点
Link<Elem> *fence;//栅栏
int leftcnt;
int rightcnt;
int size;//链表长度
voidinit(){//初始化
fence = tail = head = newLink<Elem>;
leftcnt = rightcnt = 0;
size = 1;
}
voidremoveall(){//清空所有
while (head != NULL)
{
fence = head;
head = head->next;
delete fence;
}
}
public:
LList( intsize = DefaultListSize){
init();
}
~LList(){
removeall();
}
voidclear(){
removeall();init();
}
boolinsert(Elem&,int i);
boolappend(Elem&);
boolremove(Elem&);
voidsetStart(){
fence = head;
rightcnt +=leftcnt;
leftcnt = 0;
}
voidsetEnd(){
fence = tail;
leftcnt += rightcnt;
rightcnt = 0;
}
voidprev();//前驱
voidnext(){//后继
if(fence!=tail){
fence =fence ->next;rightcnt--;leftcnt++;
}
}
intleftLength() const{return leftcnt;}
intrightLength() const{return rightcnt;}
boolsetPos(int pos);
boolgetValue(Elem& it) const{
if(rightLength()==0)returnfalse;
it = fence->next->element;
returntrue;
}
voidprint() const;
voidreverlist();//逆置
};
template<classElem>
boolLList<Elem>::insert(Elem& item, inti){//插入操作
if (i<1||i>size){
returnfalse;
}
else{
int n = 0;
Link<Elem>* temp = head;
while(n<i-1){
temp = temp->next;
n++;
}
temp->next = newLink<Elem>(item, temp->next);
size++;
returntrue;
}
}
template<classElem>
boolLList<Elem>::append(Elem& item){//添加在末端
tail = tail ->next = newLink<Elem>(item,NULL);
rightcnt++;
size++;
returntrue;
}
template<classElem>
boolLList<Elem>::remove(Elem& it){//删除某元素
bool del = false;
Link<Elem>* temp = head;
while(temp->next!=NULL){
if (temp->next->element == it){
temp->next = temp->next->next;
del = true;
leftcnt--;
size--;
}
else{
temp = temp->next;
}
}
return del;
}
template<classElem>
voidLList<Elem>::prev(){
Link<Elem>* temp = head;
if(fence == head) return;
while (temp->next!=fence) temp = temp->next;
fence = temp;
leftcnt--; rightcnt++;
}
template<classElem> boolLList<Elem>::setPos(intpos){
if((pos<0)||(pos>rightcnt+leftcnt)) returnfalse;
fence = head;
for(int i=0;i<pos;i++){
fence = fence->next;
}
returntrue;
}
template<classElem>
voidLList<Elem>::print() const{
Link<Elem>* temp = head;
cout<<"<";
while (temp!=fence)
{
cout<<temp->next->element<<" ";
temp = temp->next;
}
cout<<" | ";
while (temp->next!=NULL){
cout <<temp->next->element <<" ";
temp = temp->next;
}
cout<<" >\n ";
}
template <class Elem>
voidLList<Elem>::reverlist()
{
Link<Elem>* p,*q;
p=head->next;
head->next=NULL;//链式线性表分为两部分
while(p!=NULL){
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
}
#endif
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip