单链表的C++代码实现
2006-07-29 23:44
597 查看
C++实现
#include <iostream>
using namespace std;
//结构的定义部分
typedef int ElemType;
typedef struct LNode{
ElemType data;
LNode *next;
} *LinkList;
//结构的生成操作
void InitList(LinkList &L)
{
L=NULL;
}
//结构的清理操作
void ClearList(LinkList &L)
{
while(L)
{
LNode *P=L;
L=L->next;
delete P;
}
}
//结构的销毁操作
void DestroyList(LinkList &L)
{
ClearList(L);
}
//结构的状态查看
bool ListEmpty(LinkList L)
{
return L==NULL;
}
int ListLength(LinkList L)
{
LNode *P=L;
int len=0;
while(P)
{
len++;
P=P->next;
}
return len;
}
void ListOutput(LinkList L)
{
cout<<"(";
LNode *P=L;
while(P&&P->next)
{
cout<<P->data<<",";
P=P->next;
}
if(P) cout<<P->data;
cout<<")"<<endl;
}
void ListInfo(LinkList L)
{
cout<<" ";
ListOutput(L);
if(ListEmpty(L)) cout<<" Empty:Yes"<<endl;
else cout<<" Empty:No"<<endl;
cout<<" Length="<<ListLength(L)<<endl;
}
//结构的查改增删
bool GetElem(LinkList L,int pos,ElemType &e)
{
if(pos<1) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(P)
{
e=P->data;
return true;
}
return false;
}
bool ElemEqual(ElemType e1,ElemType e2)
{
return e1==e2;
}
bool ElemPlus(ElemType e1,ElemType e2)
{
return e1>e2;
}
bool ElemMinus(ElemType e1,ElemType e2)
{
return e1<e2;
}
LNode *LocateElem(LinkList L,ElemType e,bool (*compare)(ElemType,ElemType))
{
LNode *P=L;
while(P&&!(*compare)(P->data,e)) P=P->next;
return P;
}
bool PutElem(LinkList &L,int pos,ElemType e)
{
if(pos<1) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(P)
{
P->data=e;
return true;
}
return false;
}
bool ListInsert(LinkList &L,int pos,ElemType e)
{
if(pos<0) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(pos>0&&!P) return false;
LNode *Q=new LNode;
Q->data=e;
if(pos){
Q->next=P->next;
P->next=Q;
}
else{
Q->next=L;
L=Q;
}
return true;
}
bool ListDelete(LinkList &L,int pos,ElemType &e)
{
if(!L||pos<1) return false;
LNode *P=L;
if(pos==1) L=L->next;
else{
LNode *Q=L;
int i=1;
while(Q&&i<pos-1)
{
i++;
Q=Q->next;
}
if(!Q||!Q->next) return false;
P=Q->next;
Q->next=P->next;
}
e=P->data;
delete P;
return true;
}
//结构的功能测试
int main()
{
cout<<"无头结点的单链表结构的测试:"<<endl;
LinkList A;
cout<<"***************************************"<<endl;
cout<<"生成操作:InitList(A)"<<endl;
InitList(A);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,0,2)"<<endl;
ListInsert(A,0,2);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,1,7)"<<endl;
ListInsert(A,1,7);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,2,8)"<<endl;
ListInsert(A,2,8);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,2,21)"<<endl;
ListInsert(A,2,21);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,4,15)"<<endl;
ListInsert(A,4,15);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"删除操作:ListDelete(A,5,e)"<<endl;
ElemType e;
ListDelete(A,5,e);
ListInfo(A);
cout<<" e="<<e<<endl;
cout<<"***************************************"<<endl;
cout<<"更新操作:PutElem(A,4,39)"<<endl;
PutElem(A,4,39);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"查找操作:GetElem(A,2,e)"<<endl;
GetElem(A,2,e);
ListInfo(A);
cout<<" e="<<e<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,15,ElemEqual)"<<endl;
ListInfo(A);
cout<<" Address="<<LocateElem(A,15,ElemEqual)<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,6,ElemPlus)"<<endl;
ListInfo(A);
LNode *R=LocateElem(A,6,ElemPlus);
cout<<" Address="<<R<<endl;
if(R) cout<<" "<<R->data<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,8,ElemMinus)"<<endl;
ListInfo(A);
cout<<" Address="<<LocateElem(A,8,ElemMinus)<<endl;
cout<<"***************************************"<<endl;
cout<<"清空操作:ClearList(A)"<<endl;
ClearList(A);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"销毁操作:DestroyList(A)"<<endl;
DestroyList(A);
ListInfo(A);
cout<<"按任意键,结束...";
cin.get();
return 0;
}
#include <iostream>
using namespace std;
//结构的定义部分
typedef int ElemType;
typedef struct LNode{
ElemType data;
LNode *next;
} *LinkList;
//结构的生成操作
void InitList(LinkList &L)
{
L=NULL;
}
//结构的清理操作
void ClearList(LinkList &L)
{
while(L)
{
LNode *P=L;
L=L->next;
delete P;
}
}
//结构的销毁操作
void DestroyList(LinkList &L)
{
ClearList(L);
}
//结构的状态查看
bool ListEmpty(LinkList L)
{
return L==NULL;
}
int ListLength(LinkList L)
{
LNode *P=L;
int len=0;
while(P)
{
len++;
P=P->next;
}
return len;
}
void ListOutput(LinkList L)
{
cout<<"(";
LNode *P=L;
while(P&&P->next)
{
cout<<P->data<<",";
P=P->next;
}
if(P) cout<<P->data;
cout<<")"<<endl;
}
void ListInfo(LinkList L)
{
cout<<" ";
ListOutput(L);
if(ListEmpty(L)) cout<<" Empty:Yes"<<endl;
else cout<<" Empty:No"<<endl;
cout<<" Length="<<ListLength(L)<<endl;
}
//结构的查改增删
bool GetElem(LinkList L,int pos,ElemType &e)
{
if(pos<1) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(P)
{
e=P->data;
return true;
}
return false;
}
bool ElemEqual(ElemType e1,ElemType e2)
{
return e1==e2;
}
bool ElemPlus(ElemType e1,ElemType e2)
{
return e1>e2;
}
bool ElemMinus(ElemType e1,ElemType e2)
{
return e1<e2;
}
LNode *LocateElem(LinkList L,ElemType e,bool (*compare)(ElemType,ElemType))
{
LNode *P=L;
while(P&&!(*compare)(P->data,e)) P=P->next;
return P;
}
bool PutElem(LinkList &L,int pos,ElemType e)
{
if(pos<1) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(P)
{
P->data=e;
return true;
}
return false;
}
bool ListInsert(LinkList &L,int pos,ElemType e)
{
if(pos<0) return false;
LNode *P=L;
int i=1;
while(P&&i<pos)
{
i++;
P=P->next;
}
if(pos>0&&!P) return false;
LNode *Q=new LNode;
Q->data=e;
if(pos){
Q->next=P->next;
P->next=Q;
}
else{
Q->next=L;
L=Q;
}
return true;
}
bool ListDelete(LinkList &L,int pos,ElemType &e)
{
if(!L||pos<1) return false;
LNode *P=L;
if(pos==1) L=L->next;
else{
LNode *Q=L;
int i=1;
while(Q&&i<pos-1)
{
i++;
Q=Q->next;
}
if(!Q||!Q->next) return false;
P=Q->next;
Q->next=P->next;
}
e=P->data;
delete P;
return true;
}
//结构的功能测试
int main()
{
cout<<"无头结点的单链表结构的测试:"<<endl;
LinkList A;
cout<<"***************************************"<<endl;
cout<<"生成操作:InitList(A)"<<endl;
InitList(A);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,0,2)"<<endl;
ListInsert(A,0,2);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,1,7)"<<endl;
ListInsert(A,1,7);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,2,8)"<<endl;
ListInsert(A,2,8);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,2,21)"<<endl;
ListInsert(A,2,21);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"插入操作:ListInsert(A,4,15)"<<endl;
ListInsert(A,4,15);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"删除操作:ListDelete(A,5,e)"<<endl;
ElemType e;
ListDelete(A,5,e);
ListInfo(A);
cout<<" e="<<e<<endl;
cout<<"***************************************"<<endl;
cout<<"更新操作:PutElem(A,4,39)"<<endl;
PutElem(A,4,39);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"查找操作:GetElem(A,2,e)"<<endl;
GetElem(A,2,e);
ListInfo(A);
cout<<" e="<<e<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,15,ElemEqual)"<<endl;
ListInfo(A);
cout<<" Address="<<LocateElem(A,15,ElemEqual)<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,6,ElemPlus)"<<endl;
ListInfo(A);
LNode *R=LocateElem(A,6,ElemPlus);
cout<<" Address="<<R<<endl;
if(R) cout<<" "<<R->data<<endl;
cout<<"***************************************"<<endl;
cout<<"定位操作:LocateElem(A,8,ElemMinus)"<<endl;
ListInfo(A);
cout<<" Address="<<LocateElem(A,8,ElemMinus)<<endl;
cout<<"***************************************"<<endl;
cout<<"清空操作:ClearList(A)"<<endl;
ClearList(A);
ListInfo(A);
cout<<"***************************************"<<endl;
cout<<"销毁操作:DestroyList(A)"<<endl;
DestroyList(A);
ListInfo(A);
cout<<"按任意键,结束...";
cin.get();
return 0;
}
相关文章推荐
- Singleton模式(C++代码实现)
- 使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
- 插入排序的C++代码实现
- 数据结构之单链表(C++实现)
- C/C++实现矩阵的转置(示例代码)
- C++代码实现牛顿迭代法求数的立方根
- 螺旋队列C++代码实现实例及运行结果
- 螺旋队列C++代码实现实例及运行结果
- php实现单链表的实例代码
- [置顶] WAV音频MFCC参数提取 + DTW语音识别算法 C++代码实现
- C++对比Node.js实现Socket Server 服务端代码
- 以c++的方式实现单链表
- C++实现单链表的创建、插入、删除、逆置操作
- 查找二叉树的C++代码实现
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- C++全密码生成的实现代码
- C/C++实现栈的各种方法代码
- 图像去雾之何凯明暗通道先验去雾算法原理及c++代码实现
- 链队列的实现,C++代码实现
- C++ 大数版的加减乘除代码实现总结