#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; |
} |