头文件list.h:
#ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
template <typename T>
struct NODE
{
T data;
struct NODE<T> *next;
};
template <class T>
class nodelist
{
private:
NODE<T> *head;
public:
nodelist(){ head = NULL; };
~nodelist();
void clearlist();//清空链表
int listlength();//链表长度
void pushback(T data);//在链表末尾加入数据
void printlist();//打印链表
void searchlist(T data);//搜索
};
template <class T>
nodelist<T>::~nodelist()
{
NODE<T> *p = head;
while(head)
{
p = head;
head = head->next;
delete(p);
}
}
template <class T>
void nodelist<T>:: clearlist()
{
NODE<T> *p = head;
while(head)
{
p = head;
head = head->next;
delete(p);
}
}
template <class T>
int nodelist<T>::listlength()
{
int length=0;
NODE<T> *p=head;
while(p)
{
length++;
p = p->next;
}
return length;
}
template <class T>
void nodelist<T>::pushback(T data)
{
NODE<T> *p=head;
NODE<T> *s=new NODE<T>;
//s=(NODE*)new (NODE);
if(head==NULL)
{
s->data=data;
s->next=p;
head=s;
}
else
{
while(p->next!=NULL)
{
p = p->next;
}
s->data=data;
s->next=p->next;
p->next=s;
}
}
template <class T>
void nodelist<T>::printlist()
{
NODE<T> *p = head;
while(p)
{
std::cout<<p->data<<" ";
p = p->next;
}
}
template <class T>
void nodelist<T>::searchlist(T data)
{
int num = 0;
int flag = 0;
NODE<T> *p=head;
while(p)
{
if(p->data==data)
{
std::cout<<"在链表第 "<<num+1<<" 处找到该数据"<<std::endl;
flag = 1;
}
p = p->next;
num++;
}
if(flag==0)
std::cout<<"链表中未出现该数据"<<std::endl;
}
#endif // LIST_H_INCLUDED
main.cpp
#include <iostream>
#include "list.h"
using namespace std;
int main()
{
nodelist<char> list;
list.pushback('a');
list.pushback('s');
list.pushback('d');
list.printlist();
cout<<endl;
cout<<"链表长度:"<<list.listlength()<<endl;
list.searchlist('a');
return 0;
}
运行结果:
注:C和C++在结构体定义上有区别