数据结构之单链表 C++ 实现
来源:互联网 发布:c语言二叉树非递归遍历 编辑:程序博客网 时间:2024/06/08 06:18
/*----------head.h ----------*/
#ifndef HEAD_H
#define HEAD_H
#include <iostream>
using namespace std;
#include <cstdlib>
typedef int status;
#endif
/*----------node.h ----------*/
#ifndef NODE_H
#define NODE_H
template <typename T> struct Node{
T data;
Node<T> *next;
};
#endif
/*----------list.h ----------*/
#ifndef LIST_H
#define LIST_H
#include "node.h"
//首元素从 1 始
template <typename T> class List{
public:
List()
{
head=new Node<T>;
head->next=NULL;
}
~List()
{
Clear();
delete head;
}
bool Empty() //判空
{
if(head->next==NULL)
return true;
else
return false;
}
void Clear() //清空
{
while(head->next!=NULL){
Node<T> *p=head->next;
head->next=p->next;
delete p;
}
}
void push_back(const T &value) //压入
{
Node<T> *elem=new Node<T>;
elem->data=value;
elem->next=NULL; //构造结点
Node<T> *p=head;
while(p->next!=NULL)
p=p->next; //p指向尾结点
p->next=elem;
}
void Display() //显示
{
Node<T> *p=head->next;
while(p){
cout << p->data << " ";
p=p->next;
}
cout << endl;
}
int length() //长度
{
int j(0);
Node<T> *p=head->next;
while(p){
j++;
p=p->next;
}
return j;
}
int size()
{
int j(0);
Node<T> *p=head->next;
while(p){
j++;
p=p->next;
}
return j;
}
status Insert(int i,const T &value) //插入
{
if(i<1||i>this->size()+1){
cerr << "插入位置有误,请检查: " << endl;
return 0;
}
Node<T> *t=new Node<T>;
t->data=value;
t->next=NULL; //构造结点
Node<T> *p=head; //寻找插入位置
int j(0);
while(p->next!=NULL && j!=i-1){ //注意p->next条件 决定下标起始为1,而p决定下标起始为0
j++;
p=p->next;
}
t->next=p->next;
p->next=t;
return 1;
}
status Delete(int i) //删除
{
if(head->next==NULL){
cerr << "链表为空表,操作失败! " << endl;
return 0;
}
if(i<1 || i>this->size()){
cerr << "删除位置越界,请检查: " << endl;
return 0;
}
Node<T> *p=head;
int j(0);
while(p->next!=NULL && j!=i-1){
j++;
p=p->next;
} // 令p指向 i-1 个元素位置
Node<T> *t=p->next;
p->next=t->next;
delete t;
return 1;
}
T GetElem(int i) //取元素
{
if(head->next==NULL || i<1 || i> this->size()){
cerr << "位置越界,请检查: " << endl;
exit(0);
}
Node<T> *p=head->next;
int j(1);
while(p->next!=NULL && j!=i){
j++;
p=p->next;
}
return p->data;
}
status Replace (int i,const T &value) //替换
{
if(head->next==NULL || i <1 || i >this->size()){
cerr << "位置有误,请检查:" << endl;
exit(0);
}
int j(1);
Node<T> *p=head->next;
while(p->next!=NULL && j!=i){
j++;
p=p->next;
}
p->data=value;
return 1;
}
private:
Node<T> *head;
};
#endif
- 数据结构之单链表C语言实现
- 数据结构C语言之单链表简单实现
- 数据结构C语言实现之单链表
- 数据结构之单链表实现栈(C++)
- 数据结构c语言实现之单链表
- 数据结构c语言实现之静态单链表
- 数据结构之---c语言实现单链表
- 数据结构之单链表实现(C++)
- 【数据结构之C语言实现】单链表
- 数据结构之单链表(C语言实现)
- 数据结构之单链表的C语言实现
- 数据结构之队列(C实现)
- 数据结构之栈(C实现)
- 数据结构---单链表c实现
- 数据结构--单链表C实现
- C数据结构之单链表
- [C++]数据结构之单链表
- 数据结构c语言实现之单链表的应用
- 不支持调度模式
- VC中DDB与DIB位图编程
- glassfish v3 配置 db2 连接池
- 怎样在分录中增加F7控件,并进行过滤
- 提高ASP.Net应用程序性能的十大方法
- 数据结构之单链表 C++ 实现
- jquery 常用方法之选项卡tab
- 项目管理系列文章——关于软件工程在软件整个生命周期的位置
- 论ASP.NET设计中的性能优化问题
- C#制作CAB压缩包压缩解压类
- Funtion call conventions
- 如何使用 Net Use 从内部网中的电脑上Copy 文件?
- JMS OutLine
- 附加数据库失败,无法升级数据库,因为它是只读的