#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
int len;
struct Node
{
int data;
Node *next;
};
Node *CreateList()//创建
{
Node *pHead=(Node *)malloc(sizeof(Node));
return pHead;
}
void InitList(Node *pHead)//初始化
{
int data;
cout<<"输入链表长度:";
cin>>len;
Node *p,*q;
q=pHead;
for(int i=0; i<len; i++)
{
cin>>data;
p=(Node *)malloc(sizeof(Node));
p->data=data;
p->next=NULL;
q->next=p;
q=q->next;
}
}
void ReadList(Node *pHead)//遍历
{
Node *temp=pHead->next;
while(1)
{
cout<<temp->data<<" ";
temp=temp->next;
if(temp==NULL)break;
}
cout<<endl;
}
void ListInsert(Node *pHead,int location,int data)//插入
{
Node *p,*q;
p=pHead;
if(location<0||location>len)
{
cout<<"位置错误"<<endl;
return;
}
for(int i=0; i<location; i++)//寻找位置
{
p=p->next;
}
q=p->next;
p->next=(Node *)malloc(sizeof(Node));
p->next->data=data;
p->next->next=q;
}
void ListSearch(Node *List,int location)//查找
{
if(location<1||location>len)
{
cout<<"位置有误"<<endl;
return;
}
for(int i=1; i<=location; i++)
{
List=List->next;
}
cout<<"找到"<<List->data<<endl;
}
void ListDelete(Node *List,int location)//删除元素
{
if(location<1||location>len)
{
cout<<"位置有误"<<endl;
return;
}
for(int i=1; i<location; i++)
{
List=List->next;
}
cout<<"删除了"<<List->next->data<<endl;
Node *p=List->next;
List->next=List->next->next;
free(p);
}
void Destroy(Node *List)//销毁
{
Node *p=List->next->next;
Node *q=List->next;
while(1)
{
free(q);
q=p;
p=p->next;
if(p==NULL)
{
break;
}
}
free(q);
len=0;
cout<<"已销毁"<<endl;
}
void ListUnit(Node *Lista,Node *Listb,Node **Result)//归并
{
Node *r,*k;
if(Lista->next->data<=Listb->next->data)//准备删除较大的头节点,Result保留小的头节点作为结果链表的头节点
{
r=Listb;
k=Lista;
}
else
{
r=Lista;
k=Listb;
}
*Result=k;
Node *p=Lista->next,*q=Listb->next;
while(p&&q)
if(p->data<=q->data)
{
k->next=p;
k=k->next;
p=p->next;
}
else
{
k->next=q;
k=k->next;
q=q->next;
}
while(p)//插入p剩余的元素
{
k->next=p;
k=k->next;
p=p->next;
}
while(q)//插入q剩余的元素
{
k->next=q;
k=k->next;
q=q->next;
}
free(r);//删除多余的头节点
}
int main()
{
len=0;
Node *header=CreateList();
InitList(header);
int n;
cout<<"输入要查找的位置:";
cin>>n;
int e;
ListSearch(header,n);
cout<<"输入要插入的位置:";
cin>>n;
cin>>e;
ListInsert(header,n-1,e);
ReadList(header);
cout<<"输入要删除的位置:";
cin>>n;
ListDelete(header,n);
ReadList(header);
Destroy(header);
/*
Node *la=CreateList(),*lb=CreateList();
InitList(la);
ReadList(la);
InitList(lb);
ReadList(lb);
Node *result;
ListUnit(la,lb,&result);
ReadList(result);*/
return 0;
}
链表建立,插入,查找,删除,归并
最新推荐文章于 2019-12-09 22:15:13 发布