List<T> C++实现
#include "stdafx.h"
#include <iostream>
using namespace std;
template<typename T>
struct Node
{
T value;
Node* next;
Node* pre;
};
template<typename T>
class List
{
private:
Node<T>* head;
Node<T>* current;
Node<T>* create;
Node<T>* read;
int number ;
public:
List()
{
head=new Node<T>();
head->next=NULL;
head->pre=NULL;
current=head;
read=current;
number=0;
}
~List(){
Node<T> * temp=current;
while (temp->next!=NULL)
{
temp=temp->next;
delete(temp->pre);
}
if (temp->next==NULL)
{
delete(temp);
}
cout<<"析构完成"<<endl;
}
void Add(T a)
{
create=new Node<T>();
create->value=a;
create->next=current;
create->pre=NULL;
current->pre=create;
current=create;
read=current;
number++;
}
T getItem(int index){
if(index>number-1){
cout<<"异常"<<endl;
}
Node<T> * temp=current;
for(int i=0;i<index;i++){
temp=temp->next;
}
return temp->value;
}
bool Contains(T a){
Node<T> * temp=current;
bool ret=false;
while (temp->next!=NULL)
{
if (temp->value==a)
{
ret=true;
break;
}
temp=temp->next;
}
return ret;
}
void Remove(T a){
Node<T> * temp=current;
while (temp->next!=NULL)
{
if (temp->value==a)
{
number--;
if (temp->pre!=NULL)
{
temp->pre->next=temp->next;
temp->next->pre=temp->pre;
delete(temp);
}
else
{
current=current->next;
delete(temp);
}
break;
}
else
{
temp=temp->next;
}
}
read=current;
}
void Display()
{
Node<T> * temp=current;
while (temp->next!=NULL)
{
cout<<temp->value<<endl;
temp=temp->next;
}
}
int getNumber()
{
return number;
}
Node<T>* Read()
{
if(read->next!=NULL){
read=read->next;
return read->pre;
}
else{
return NULL;
}
}
};
void Test()
{
List<int> *p=new List<int>();
for (int i=0;i<33;i++)
{ p->Add(i);
}
p->Display();
cout<<"个数:"<<p->getNumber()<<endl;
getchar();
Node<int>* va=p->Read();
while(va!=NULL){
cout<<va->value<<endl;
va=p->Read();
}
delete(p);
}
int main()
{
Test();
getchar();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!