#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct Node
{
int data;
struct Node * pNext;
}NODE , * PNODE;//NODE =struct Node,PNODE=struct Node *
/******************函数声明***********************/
PNODE create_list(
);//创建链表
void travrse_list(PNODE pHead)//遍历链表
int getlength_list(PNODE pHead)//获取链表的长度
void delete_list(PNODE pHead,int val)//删除链表中某一特定元素val,比如:删除链表中数据为3的结点
void insert_list(PNODE pHead,int pos,int val)//在链表pos位置上插入val元素
void sort_list(PNODE pHead)//使用冒泡法进行排序
/******************************子函数************************************/
//创建链表
PNODE
create_list( )
{
PNODE pHead,pTail;
int i=0;
int len;
pHead=(PNODE)malloc(sizeof(NODE));
if(pHead ==
NULL)
{
cout<<"创建链表头结点失败!"<<endl;
exit(-1);
}
pTail=pHead;
pTail->pNext=NULL;
cout<<"请输入链表的结点个数,len=";
cin>>len;
for(i=0;i<len;++i)
{
PNODE
pNew=(PNODE)malloc(sizeof(NODE));
if(pNew ==
NULL)
{
cout<<"创建链表第"<<i+1<<"结点失败!"<<endl;
exit(-1);
}
cout<<"请输入第"<<i+1<<"结点的数据:";
cin>>pNew->data;
pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}
return
pHead;
}
//遍历链表
void travrse_list(PNODE pHead)
{
PNODE
p=pHead->pNext;
if(p==NULL)
{
cout<<"所输入的链表为空,遍历链表失败!"<<endl;
return
;
}
while(p!=NULL)
{
cout<<p->data<<"
";
p=p->pNext;
}
cout<<endl;
}
//获取链表的长度
int getlength_list(PNODE pHead)
{
int len=0;
PNODE p=pHead->pNext;
if(p==NULL)
{
cout<<"所输入的链表为空,获取链表长度失败!"<<endl;
return 0;
}
while(p!=NULL)
{
++len;
p=p->pNext;
}
return len;
}
//删除链表中某一特定元素val,比如:删除链表中数据为3的结点
void delete_list(PNODE pHead,int
val)
{
PNODE p1=pHead;
PNODE p2=pHead->pNext;
PNODE
p3=NULL;//用来释放所删除结点
int cnt=0;
int len;
if(p2==NULL)
{
cout<<"所输入的链表为空,删除失败!"<<endl;
return
;
}
len=getlength_list(pHead);
while(p2!=NULL)
{
if(p2->data ==
val)
{
p3=p2;
p1->pNext=p2->pNext;
p2=p2->pNext;
free(p3);//释放所删除的结点的内存
p3=NULL;
}
else
{
++cnt;
p1=p2;
p2=p2->pNext;
}
}
if(cnt==len)
{
cout<<"链表没有您所需要删除的元素!"<<endl;
return
;
}
travrse_list(pHead);
}
//在链表pos位置上插入val元素
void insert_list(PNODE pHead,int pos,int
val)
{
PNODE p1=pHead;
int i=0;
int len;
len=getlength_list(pHead);
if(pos<0||pos>len+1)
{
cout<<"无法在此位置插入元素!"<<endl;
return;
}
while(i<pos-1)
{
p1=p1->pNext;
++i;
}
PNODE p2=(PNODE)malloc(sizeof(NODE));
if(p2 ==
NULL)
{
cout<<"在插入元素时创建链表失败!"<<endl;
exit(-1);
}
p2->data=val;
p2->pNext=p1->pNext;
p1->pNext=p2;
return;
}
//使用冒泡法进行排序
void sort_list(PNODE pHead)
{
PNODE p1=pHead;
PNODE p2;
int i=0,j=0;
int len;
int t;
len=getlength_list(pHead);
for(i=0,p1=pHead->pNext;i<len-1;++i,p1=p1->pNext)
for(j=i+1,p2=p1->pNext;j<len;++j,p2=p2->pNext)
{
if(p1->data>p2->data)
{
t=p1->data;
p1->data=p2->data;
p2->data=t;
}
}
}
/******************************主函数************************************/
int
main(void)
{
PNODE list1;
int cnt;
list1=create_list();
travrse_list(list1);
//delete_list(list1,2);
cnt=getlength_list(list1);
cout<<"链表的长度为:"<<cnt<<endl;
insert_list(list1,4,9);
travrse_list(list1);
sort_list(list1);
travrse_list(list1);
return
0;
}
原文:http://www.cnblogs.com/kuoyan/p/3680736.html