[c++]代码库
#include <iostream>
#include <stdio.h>
using namespace std;
typedef char ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList(LinkList &L)//初始化链表
{
L=new LNode;
L->next=NULL;
cout<<L->next<<endl;
return 1;
}
Status ListCreate_L(LinkList &L,int n)//尾插法插入元素
{
LNode *rearPtr,*curPtr; //一个尾指针,一个指向新节点的指针
rearPtr=L; //初始时头结点为尾节点,rearPtr指向尾巴节点
for (int i=1;i<=n;i++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后
curPtr=new LNode;//生成新结点
cin>>curPtr->data;//输入元素值
curPtr->next=NULL; //最后一个节点的next赋空
rearPtr->next=curPtr;
rearPtr=curPtr;
}
return 1;
}
void ListPrint_L(LinkList &L)//输出单链表
{
LNode *p=L->next; //p指向第一个元素结点
while(p)
{
if(p->next!=NULL)
cout<<p->data<<" ";
else
cout<<p->data;
p=p->next;
}
cout<<endl;
}
void ListLength_L(LinkList &L)//长度
{
int len=0;
LNode *p=L->next;
while(p)
{
len++;
p=p->next;
}
cout<<len<<endl;
}
void EmptyList_L(LinkList &L)//判断单链表是否为空
{
LNode *p =L->next;
if(p)
cout<<"no"<<endl;
else
cout<<"yes"<<endl;
}
void GetElem(LinkList &L,int a)//单链表取值
{
LNode *p=L->next;
int j=1;
while(p&&j<a)
{
p=p->next;
j++;
}
cout<<p->data<<endl;
}
void GetAdr(LinkList &L,ElemType c)//找元素的位置
{
LNode *p=L->next;
int i=1;
while(p)
{
if(p->data==c)
{
cout<<i<<endl;
break;
}
else
{
i++;
p=p->next;
}
}
}
void ListInsert(LinkList &L,int i,ElemType e)//插入一结点
{
LNode *p=L->next;
int j=1;
while(p&&(j<i-1))
{
p=p->next;
j++;
}
LNode *s;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
}
void ListDelete(LinkList &L,int i)//删除某一结点
{
LNode *p=L->next,*q;
int j=1;
while((p->next)&&(j<i-1))
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
delete q;
}
void ListClear(LinkList &L)//释放链表
{
LNode *p;
while(L->next)
{
p=L->next;
L->next=p->next;
delete p;
}
}
int main()
{
LinkList L;
InitList(L);
int n;
cin>>n;
ListCreate_L(L,n);
ListPrint_L(L);
ListLength_L(L);
EmptyList_L(L);
GetElem(L,3);
GetAdr(L,'a');
ListInsert(L,4,'x');
ListPrint_L(L);
ListDelete(L,3);
ListPrint_L(L);
ListClear(L);
return 0;
}