list.h
#ifndef H_M
#define H_M
#include<iostream>
using namespace std;
namespace list{
class node{
int value;
node* next;
public:
node(const node&);
node(const int& v=int(),node* n=0):value(v),next(n){}
~node(){}
void s_val(int& v){value=v;}
void s_nex(node* n){next=n;}
int g_val()const{return value;}
node* g_nex()const{return next;}
bool operator<(node& b){return value<b.value;}
friend ostream& operator<<(ostream&,const node&);
};
class list{
node* head;
node* iter;
int length;
node* f_pre(const node*);
public:
explicit list(node* h=0):head(h),iter(head),length(0){}
list(const int& v,node* n=0):head(new node(v,n)),iter(head),length(1){}
~list();
int g_len()const{return length;}
bool is_tail(const node* aim){return !aim->g_nex();}
node* g_now(){
if(iter==0)iter=head;
return iter;}
node* g_nex(){
if(iter==0)
iter=head;
if(iter=iter->g_nex())
return iter;
}
node* g_head(){return head;}
void in_new(node*);
void insert(node*,node*);
void p_back(node*);
void p_front(node*);
node* find(int);
void del(node*);
void sort();
friend ostream& operator<<(ostream&,const list&);
};
};
#endif
list.cpp
#include"list.h"
using namespace list;
node::node(const node& n){
value=n.value;
next=0;
}
ostream& operator<<(ostream& os,const node& aim){
os<<aim.value;
if(aim.next)cout<<*(aim.next);
return os;
}
list::~list(){
iter=head;
while(iter){
head=head->g_nex();
delete iter;
iter=head;
}
}
node* list::f_pre(const node* aim){
node* temp=head;
if(aim==head){
return head;
}else{
for(;temp->g_nex()!=aim && (!is_tail(temp));temp=temp->g_nex());
}
return temp;
}
void list::in_new(node* aim){
cout<<"输入"<<endl;
int temp;
cin>>temp;
node* add=new node(temp);
insert(add,aim);
}
void list::insert(node* add,node* aim){
node* pre=f_pre(aim);
if(aim==head){
p_front(add);
}
else{
pre->s_nex(add);
add->s_nex(aim);
++length;
}
}
void list::p_back(node* add){
node* temp=head;
if(head==0){
head=add;
++length;
}
else{
for(;(!is_tail(temp));temp=temp->g_nex());
temp->s_nex(add);
add->s_nex(0);
++length;
}
}
void list::p_front(node* add){
add->s_nex(head);
head=add;
++length;
}
node* list::find(int aim){
node* temp=head;
for(;temp->g_val()!=aim&&(!is_tail(temp));temp=temp->g_nex());
return temp;
}
void list::del(node* aim){
if(aim==head){
if(is_tail(aim)){
cout<<"EMPTY";
return;
}
head=aim->g_nex();
delete aim;
--length;
}
else if(is_tail(aim)){
node* pre=f_pre(aim);
pre->s_nex(0);
delete aim;
--length;
}
else{
node* pre=f_pre(aim);
pre->s_nex(aim->g_nex());
delete aim;
--length;
}
}
void list::sort(){
node *end=head;
while(end->g_nex()){
node* i,*ite;
for(i=end->g_nex(),ite=head;(*ite)<(*i)&&ite!=end;ite=ite->g_nex());
if(ite==head &&i->g_val()<ite->g_val()){
p_front(new node(i->g_val()));
del(i);
}
else if((*end)<(*i)){
end=i;
}
else{
insert(new node(i->g_val()),ite);
del(i);
}
}
}
ostream& operator<<(ostream& os,const list& li){
os<<*(li.head);
return os;
}
分享到:
相关推荐
基本链表1
C语言大作业,基本联保的操作,适合初学者
简单的链表的基本操作,包括建空链表、删除结点、输出链表等
DSA链接列表 基本链表操作
数据结构 模板化的链表类 包括对链表基本操作 链表游标的使用实例
c 语言 链表基本操作,创建 查找 删除 插入 双向链表源码
ReverseLinkedList:反转单个基本链表的算法设计
链表的基本操作链表的基本操作
C++链表的基本操作,实现带头节点创建,插入,显示等功能
【2】:测试头部插入结点建立链表 【3】:链表的长度 【4】:清空操作 【5】:判断单链表是否为空 【6】:追加操作,在单链表的表尾增加个元素 【7】:在指定位置前,插入一个结点 【8】:在指定位置之后,插入一个...
链表的基本操作: 2.链表的基本操作 对链表施行的操作有很多种,最基本的操作是在链表中插入结点、在链表中删除结点、在链表中查找结点等。 (1) 链表结点的插入 ①在空链表中插入一个结点 空链表就是头指针为空的...
链表基本操作,是关于代码的使用,链表的基本操作,设计等操作
数据库与数据结构课程 堆栈链表与队列链表的基本操作函数,还有可供参考的可执行文件exe
链表的一些基本功能
C++链表基本(创建、插入、删除、释放)
C++链表基本操作 链表的操作基本都有 找个东西不容易
【实验课程名称】算法与数据结构 【实验项目名称】链表基本操作的实现