#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList merge(LinkList &la,LinkList &lb)
{
LNode *pa=la->next,*pb=lb->next,*pc;
LinkList lc;
lc=pc=la;
while(pa&&pb)
{
if(pa->data<pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if(pa->data>pb->data)
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
else
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
}
if(pa)
pc->next=pa;
else
pc->next=pb;
free(lb);
return lc;
}
LinkList List_HeadInsert(LinkList &L)
{
LNode *s;int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=999)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
int Length(LinkList L)
{
int cnt=0;
LNode *p=L->next;
while(p)
{
cnt++;
p=p->next;
}
return cnt;
}
LinkList solution(LinkList L)//寻找平衡点
{
int index=0;
LNode *p=L->next,*q;
int sum=0,left=0,right=0;
while(p)
{
sum=sum+p->data;
p=p->next;
}
p=L->next;
q=p->next;
right=sum-p->data;
while(q)
{
left+=p->data;
right=right-q->data;
if(left!=right)
{
p=p->next;
q=q->next;
}
else
return p;
}
return NULL;
}
LinkList returnp(LinkList L,int x)
{
LNode *q=L->next;
while(q!=NULL)
{
if(x==q->data)
return q;
else
q=q->next;
}
}
LinkList returnL(LinkList &L)
{
LNode *s;int x,n=10;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
while(n--)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=rand()%100+1;
s->next=L->next;
L->next=s;
}
return L;
}
LinkList selectsort(LinkList &L)
{
LNode *p,*q,*min;
p=L->next;
while(p)
{
q=p->next;
min=p;
while(q)
{
if(q->data<min->data)
min=q;
q=q->next;
}
if(min!=p)
{
swap(min->data,p->data);
}
p=p->next;
}
return L;
}
void print(LinkList L)
{
LNode *p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
}
int search_k(LinkList L,int k)
{
int cnt=0;
LNode *p=L->next,*q=L->next;
while(p)
{
if(cnt<k)
cnt++;
else
q=q->next;
p=p->next;
}
if(cnt<k)
return -1;
else
return q->data;
}
void reverse(LinkList &L)
{
LNode *p,*q;
p=L->next;
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void printmenu()
{
printf("\t\t\t\tLinKList\n");
printf("Operation choice:\n");
printf("\t1:InsertHead\t2:Length\t3:print\t4.randLiklist\t\n");
printf("\t61banpoint\t62:returnp\t63.merge_lalb\n");
printf("\t10:Reverse\t11:selectsort\t12:search_reark\n");
cout<<"0:EXIT"<<endl;
cout<<"Input:";
}
int main()
{
int ch;
//LinkList L,L1,L2,L3;
printmenu();
while(1)
{
scanf("%d",&ch);
if(ch==0) break;
switch(ch)
{
case 1:
L=List_HeadInsert(L);
printf("success!\n");
break;
case 2:
cout<<"length:"<<Length(L)<<endl;
break;
case 3:
print(L);
printf("success\n");
break;
case 4:
L=returnL(L);
cout<<"success\n";
break;
case 10:
reverse(L);
cout<<"success\n";
break;
case 11:
L=selectsort(L);
cout<<"success\n";
break;
case 12:
int k;
cout<<"input:";
cin>>k;
cout<<search_k(L,k)<<" success\n";
break;
case 61:
cout<<solution(L);
cout<<" success\n";break;
case 62:
int x;
cout<<"inputx:";
cin>>x;
cout<<"addressx:"<<returnp(L,x)<<endl;
break;
case 63:
L1=returnL(L1);
L1=selectsort(L1);
print(L1);cout<<"\n";
L2=returnL(L2);
L2=selectsort(L2);
print(L2);cout<<"\n";
L3=merge(L1,L2);
print(L3);
cout<<" success\n";break;
default:
printf("error\n");
}
}
return 0;
}
单链表操作集合完整版
最新推荐文章于 2025-05-10 15:58:28 发布