线性链表类:文件名 Linked_List.h
#include <iostream>
using namespace std;
template <class T>
//定义结点类型
struct node
{
T d;
node *next;
};
template <class T>//T为虚拟类型
class Linked_List
{
private:
node<T> *head;
public:
Linked_List();
int flag_Linked_List();
void prt_Linked_List();
void ins_Linked_List(T);
T del_Linked_List();
};
//建立空链表
template <class T>
Linked_List<T>::Linked_List()
{
head=NULL;
return;
}
//检测单链表状态
template <class T>
int Linked_List<T>::flag_Linked_List()
{
if(head==NULL)return(0);
return (1);
}
//从头指针开始扫描输出链表中的元素
template <class T>
void Linked_List<T>::prt_Linked_List()
{
node<T> *p;
p=head;
if(p==NULL)
{
cout<<"空链表"<<endl;return;
}
do{
cout<<p->d<<endl;
p=p->next;
}while(p!=NULL);
return;
}
//新元素插入到链头
template <class T>
void Linked_List<T>::ins_Linked_List(T b)
{
node<T> *p;
p=new node<T>;
p->d=b;
p->next=head;
head=p;
return;
}
//删除链头元素
template <class T>
T Linked_List<T>::del_Linked_List()
{
T y;
node<T> *q;
if(head==NULL)
{
cout<<"空链表"<<endl;
return(0);
}
q=head;
y=q->d;
head=q->next;
delete q;
return y;
}
2.应用实例
#include "Linked_List.h"
#include<stdlib.h>
int main()
{
Linked_List<int> s;
cout<<"第一次从头指针开始扫描输出单链表s中元素:"<<endl;
s.prt_Linked_List();
s.ins_Linked_List(10);
s.ins_Linked_List(20);
s.ins_Linked_List(30);
s.ins_Linked_List(40);
cout<<"第二次从头指针开始扫描输出单链表s中元素:"<<endl;
s.prt_Linked_List();
if(s.flag_Linked_List())
cout<<"删除的链头元素"<<s.del_Linked_List()<<endl;
if(s.flag_Linked_List())
cout<<"删除的链头元素"<<s.del_Linked_List()<<endl;
cout<<"第三次从头指针开始扫描输出单链表s中元素:"<<endl;
s.prt_Linked_List();
system("pause");
return 0;
}
3.实验结果
第一次从头指针开始扫描输出单链表s中元素:
空链表
第二次从头指针开始扫描输出单链表s中元素:
40
30
20
10
删除的链头元素40
删除的链头元素30
第三次从头指针开始扫描输出单链表s中元素:
20
10
请按任意键继续. . .