#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
const int Maxsize=100;
struct LNode {
LNode* next;
ElemType data;
};
void InitList(LNode* &HL)//初始化
{
HL=NULL;
}
void ClearList(LNode* &HL)//清空
{
HL=NULL;
}
int LenthList(LNode* HL)//得到单链表的长度
{
int i=0;
while(HL!=NULL)
{
i++;
HL=HL->next;
}
return i;
}
bool EmptyList(LNode* HL)//判断单链表是否为空
{
return HL==NULL;
}
ElemType GetList(LNode* HL,int pos)//找出给定序号pos的元素
{
if(pos<1)
{
cout << " pos is out range! " << endl;
exit(1);
}
int j=0;
while(HL!=NULL)
{
j++;
if(j==pos) break;
HL=HL->next;
}
if(HL!=NULL)
return HL->data;
else
{
cout << " pos is out range! " << endl;
exit(1);
}
}
void TraverseList(LNode* HL)//遍历单链表
{
while(HL!=NULL)
{
cout << HL->data << " ";
HL=HL->next;
}
cout << endl;
}
bool FindList(LNode* HL, ElemType& item)//找出给定值
{
while(HL!=NULL)
if(HL->data==item)
{
item = HL->data;
return true;
}
else HL=HL->next;
return false;
}
bool UpdateList(LNode* HL, const ElemType& item)//更新单链表的值
{
while(HL!=NULL)
if(HL->data == item) break;
else HL=HL->next;
if(HL==NULL) return false;
else
{
HL->data=item;
return true;
}
}
bool InsertList(LNode* &HL, ElemType item, int pos)//按指定条件插入元素
{
if(pos<-1)
{
cout << "pos值无效!" << endl;
return false;
}
LNode* newptr;
newptr=new LNode;
newptr->data=item;
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0)
{
while(cp!=NULL)
{
if(item<cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
}
else if(pos==-1)
while(cp!=NULL)
{
ap=cp;
cp=cp->next;
}
else
{
int k=0;
while(cp!=NULL)
{
k++;
if(k==pos) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL && k+1<pos)
{
cout << " pos值超出单链表长度加1! " << endl;
return false;
}
}
if(ap==NULL)
{
newptr->next=HL;
HL=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
return true;
}
bool DeleteList(LNode* &HL, ElemType& item, int pos)//按指定条件删除元素
{
if(HL==NULL)
{
cout << "单链表为空,删除无效!" << endl;
return false;
}
if(pos<-1)
{
cout << "pos值无效!" << endl;
return false;
}
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0)
{
while(cp!=NULL)
{
if(item==cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL)
{
cout << " 单链表中没有相应的节点可删除! " << endl;
}
}
else if(pos==-1)
while(cp->next!=NULL) {ap=cp; cp=cp->next;}
else
{
int l=0;
while(cp!=NULL)
{
l++;
if(l==pos) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL)
{
cout << " pos值无效! " << endl;
return false;
}
}
if(ap==NULL)
HL=HL->next;
else
ap->next=cp->next;
delete cp;
return true;
}
void SortList(LNode* &HL)//排序
{
LNode* SL;
InitList(SL);
LNode* r=HL;
while(r!=NULL)
{
LNode* t=r->next;
LNode* cp=SL;
LNode* ap=NULL;
while(cp=!NULL)
{
if(r->data < cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(ap==NULL)
{
r->next=SL;
SL=r;
}
else
{
r->next=cp;
ap->next=r;
}
r=t;
}
HL=SL;
}
LNode *newlist(LNode* &HL,int x)//删除相同的元素
{
LNode *p,*t;
while(HL)
{
if(HL->data==x) {p=HL; HL=HL->next; free(p); p=NULL;}
else break;
}
if(HL)
{
p=HL;
while(p->next)
{
if(p->next->data==x)
{
t=p->next;
p->next=p->next->next;
free(t);
t=NULL;
}
else
p=p->next;
}
}
return HL;
}
int main()
{
ElemType x1=56,x2=77,x3=5;
int a[100]={0};
LNode* t;
InitList(t);
for(int m=0; m<5; m++)
{
cin >> a[m];
InsertList(t, a[m],m+1);
}
cout << endl;
cout << "单链表为:" ;
TraverseList(t);
cout << endl;
cout << "单链表长度:" << LenthList(t) << endl;
cout << endl;
cout << "在表头插入元素值56!" << endl;
InsertList(t,56,1);
cout << "在表尾插入元素值77!" << endl;
InsertList(t,77,7);
cout << endl;
cout << "新的单链表为:" ;
TraverseList(t);
cout << endl;
cout << "下面将删除表头元素的值,得到的单链表为:" << endl;
DeleteList(t,x1,0);
TraverseList(t);
cout << endl;
cout << "下面将删除表尾元素的值,得到的单链表为:" << endl;
DeleteList(t,x2,6);
TraverseList(t);
cout << endl;
cout << " 下面将删除单链表中为5的值,单链表变成:" << endl;
newlist(t,5);
//DeleteList(t,x3,0);
//DeleteList(t,x3,0);
TraverseList(t);
return 0;
}
#include<stdlib.h>
using namespace std;
typedef int ElemType;
const int Maxsize=100;
struct LNode {
LNode* next;
ElemType data;
};
void InitList(LNode* &HL)//初始化
{
HL=NULL;
}
void ClearList(LNode* &HL)//清空
{
HL=NULL;
}
int LenthList(LNode* HL)//得到单链表的长度
{
int i=0;
while(HL!=NULL)
{
i++;
HL=HL->next;
}
return i;
}
bool EmptyList(LNode* HL)//判断单链表是否为空
{
return HL==NULL;
}
ElemType GetList(LNode* HL,int pos)//找出给定序号pos的元素
{
if(pos<1)
{
cout << " pos is out range! " << endl;
exit(1);
}
int j=0;
while(HL!=NULL)
{
j++;
if(j==pos) break;
HL=HL->next;
}
if(HL!=NULL)
return HL->data;
else
{
cout << " pos is out range! " << endl;
exit(1);
}
}
void TraverseList(LNode* HL)//遍历单链表
{
while(HL!=NULL)
{
cout << HL->data << " ";
HL=HL->next;
}
cout << endl;
}
bool FindList(LNode* HL, ElemType& item)//找出给定值
{
while(HL!=NULL)
if(HL->data==item)
{
item = HL->data;
return true;
}
else HL=HL->next;
return false;
}
bool UpdateList(LNode* HL, const ElemType& item)//更新单链表的值
{
while(HL!=NULL)
if(HL->data == item) break;
else HL=HL->next;
if(HL==NULL) return false;
else
{
HL->data=item;
return true;
}
}
bool InsertList(LNode* &HL, ElemType item, int pos)//按指定条件插入元素
{
if(pos<-1)
{
cout << "pos值无效!" << endl;
return false;
}
LNode* newptr;
newptr=new LNode;
newptr->data=item;
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0)
{
while(cp!=NULL)
{
if(item<cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
}
else if(pos==-1)
while(cp!=NULL)
{
ap=cp;
cp=cp->next;
}
else
{
int k=0;
while(cp!=NULL)
{
k++;
if(k==pos) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL && k+1<pos)
{
cout << " pos值超出单链表长度加1! " << endl;
return false;
}
}
if(ap==NULL)
{
newptr->next=HL;
HL=newptr;
}
else
{
newptr->next=cp;
ap->next=newptr;
}
return true;
}
bool DeleteList(LNode* &HL, ElemType& item, int pos)//按指定条件删除元素
{
if(HL==NULL)
{
cout << "单链表为空,删除无效!" << endl;
return false;
}
if(pos<-1)
{
cout << "pos值无效!" << endl;
return false;
}
LNode* cp=HL;
LNode* ap=NULL;
if(pos==0)
{
while(cp!=NULL)
{
if(item==cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL)
{
cout << " 单链表中没有相应的节点可删除! " << endl;
}
}
else if(pos==-1)
while(cp->next!=NULL) {ap=cp; cp=cp->next;}
else
{
int l=0;
while(cp!=NULL)
{
l++;
if(l==pos) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(cp==NULL)
{
cout << " pos值无效! " << endl;
return false;
}
}
if(ap==NULL)
HL=HL->next;
else
ap->next=cp->next;
delete cp;
return true;
}
void SortList(LNode* &HL)//排序
{
LNode* SL;
InitList(SL);
LNode* r=HL;
while(r!=NULL)
{
LNode* t=r->next;
LNode* cp=SL;
LNode* ap=NULL;
while(cp=!NULL)
{
if(r->data < cp->data) break;
else
{
ap=cp;
cp=cp->next;
}
}
if(ap==NULL)
{
r->next=SL;
SL=r;
}
else
{
r->next=cp;
ap->next=r;
}
r=t;
}
HL=SL;
}
LNode *newlist(LNode* &HL,int x)//删除相同的元素
{
LNode *p,*t;
while(HL)
{
if(HL->data==x) {p=HL; HL=HL->next; free(p); p=NULL;}
else break;
}
if(HL)
{
p=HL;
while(p->next)
{
if(p->next->data==x)
{
t=p->next;
p->next=p->next->next;
free(t);
t=NULL;
}
else
p=p->next;
}
}
return HL;
}
int main()
{
ElemType x1=56,x2=77,x3=5;
int a[100]={0};
LNode* t;
InitList(t);
for(int m=0; m<5; m++)
{
cin >> a[m];
InsertList(t, a[m],m+1);
}
cout << endl;
cout << "单链表为:" ;
TraverseList(t);
cout << endl;
cout << "单链表长度:" << LenthList(t) << endl;
cout << endl;
cout << "在表头插入元素值56!" << endl;
InsertList(t,56,1);
cout << "在表尾插入元素值77!" << endl;
InsertList(t,77,7);
cout << endl;
cout << "新的单链表为:" ;
TraverseList(t);
cout << endl;
cout << "下面将删除表头元素的值,得到的单链表为:" << endl;
DeleteList(t,x1,0);
TraverseList(t);
cout << endl;
cout << "下面将删除表尾元素的值,得到的单链表为:" << endl;
DeleteList(t,x2,6);
TraverseList(t);
cout << endl;
cout << " 下面将删除单链表中为5的值,单链表变成:" << endl;
newlist(t,5);
//DeleteList(t,x3,0);
//DeleteList(t,x3,0);
TraverseList(t);
return 0;
}