33,027
社区成员




#include "LinkList.h"
#include <iostream>
using namespace std;
//创建一个带头结点单链表,当输入为ctrl +Z 输入结束
int CreateList_L(LinkList &L)
{
L = new LNode();
L->next = NULL;
ElemType data ;
LinkList p =NULL;
while(cin>>data)
{
p = new LNode();
p->data = data ;
p->next = L->next ;
L->next = p;
}
return 1;
}
//L为带头结点的单链表的头指针
//当第i个 元素存在时,其值赋给e 并返回 1
int GetElem_L(LinkList L,int i,ElemType &e)
{
LinkList p = L->next;
int j=1;
while(p && j<i )
{
p=p->next ;
j++;
}
if(!p || j>i ) return -1;
e = p->data ;
return 1;
}
//在带头结点的单链线性表L中第i个位置之前插入元素 e
int ListInsert_L(LinkList& L,int i,ElemType e)
{
LinkList p = L->next;
int j=1;
while( p && j<i-1)
{
p = p->next ;
j++;
}
if(!p || j> i-1)
return -1;
LinkList q = new LNode();
q->data = e ;
q->next = p->next ;
p->next = q ;
return 1;
}
//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值
int ListDelete_L(LinkList& L,int i,ElemType& e)
{
LinkList p = L->next;
int j=1;
while( p && j<i-1)
{
++j ;
p=p->next ;
}
// p为i 前面那个元素的 指针
if( !p || j> i-1) return -1;
LinkList q = p->next ; //第 i 个元素
p->next = q->next ;
delete q ;
return 1;
}
//遍历单链表
int TraverseList(LinkList & L)
{
LinkList p = L;
while(p->next != NULL)
{
cout<<p->next->data<<" ";
p = p->next ;
}
cout<<endl;
return 1;
}
//销毁单链表
int DestroyList(LinkList & L)
{
while(L != NULL)
{
LinkList p = L;
L = L->next ;
delete p ;
}
return 1;
}
int main()
{
LinkList L ;
cout<<"创建一个带头结点单链表,当输入为ctrl +Z 输入结束"<<endl;
CreateList_L(L) ;
cout<<endl;
cout<<"遍历输出"<<endl;
TraverseList(L) ;
cout<<"在第2个位置插入一个数 3"<<endl;
ListInsert_L(L,2,3);
cout<<"遍历输出"<<endl;
TraverseList(L) ;
cout<<endl;
ElemType e;
cout<<"在第2个位置删除一个数 "<<endl;
ListDelete_L( L,2,e);
cout<<endl;
cout<<"遍历输出"<<endl;
TraverseList(L) ;
DestroyList( L) ;
system("pause") ;
return 0;
}
typedef struct LNode
{
int data;//结点数据
LNode *next;//后继
}LNode,*LinkList;//LNode*<=>LinkList
DuLinkList GetElem(LinkList &L,int i)
{
LinkList* p=new LinkList;
if(i<0)
{
p=NULL;
}
else if(i==0)
{
p=L;
}
else
{
for(int j=0;j<i;j++)
{
p=L->next;
}
}
return p;
}
bool ListInsert(LinkList &L,int i,int e)
{
bool flag;
LNode* p=GetElem(L,i);
LNode* s=new LNode;
if(!p||!s)
{
flag=false;
}
else
{
s->data=e;
s->next=p;
flag=true;
}
return flag;
}
bool ListDelete(LinkList &L,int i)
{
bool flag;
LNode* p=GetElem(L,i);
if(!p)
{
flag=false;
}
else
{
delete p;
flag=true;
}
return flag;
}
int GetLength(LinkList &L)
{
int i=0;
LNode* p=GetElem(LinkList L,0);
while(p->next!=NULL)
{
i=i+1;
}
return i;
}