1 例题


#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
typedef struct ListNode
{
int val;
ListNode *next;
}ListNode;
typedef struct ListNode *LinkList;
void Create(LinkList *L ,int EndTag);
int locate_elem(LinkList L ,ElemType e);
void Insert_elem(LinkList *L,int i,ElemType e);
void Delete_elem(LinkList *L,ElemType e);
void inter_sec(LinkList *A,LinkList *B);
void uni(LinkList *A,LinkList *B);
void show_afterSort(LinkList A);
int main()
{
std::ios::sync_with_stdio(false);
int end_tag;
cin>>end_tag;
LinkList A_;
LinkList B_;
Create(&A_,end_tag);
LinkList pa=A_;
pa=pa->next;
cout<<"A is created as: ";
while(pa)
{
cout<<pa->val<<" ";
pa=pa->next;
}
cout<<endl;
int ind;
int ele;
cin>>ind>>ele;
Insert_elem(&A_,ind,ele);
int elem;
cin>>elem;
Delete_elem(&A_,elem);
int find_ele;
cin>>find_ele;
locate_elem(A_,find_ele);
int not_find;
cin>>not_find;
locate_elem(A_,not_find);
int end_tag2;
cin>>end_tag2;
Create(&B_,end_tag2);
LinkList pb=B_;
pb=pb->next;
cout<<"B is created as: ";
while(pb)
{
cout<<pb->val<<" ";
pb=pb->next;
}
cout<<endl;
inter_sec(&A_,&B_);
uni(&A_,&B_);
show_afterSort(A_);
free(A_);
free(B_);
return 0;
}
void Create(LinkList *L ,int EndTag)
{
LinkList p,r;
int tmp;
cin>>tmp;
*L=(LinkList)malloc(sizeof(ListNode));
r=*L;
while(tmp!=EndTag)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->val=tmp;
r->next=p;
r=p;
cin>>tmp;
}
r->next=NULL;
}
int locate_elem(LinkList L ,ElemType e)
{
int i=0;
LinkList tmp;
tmp=L->next;
while(tmp)
{
i++;
if(e==tmp->val)
{
cout<<e<<" is located at index of "<<i<<endl;
return 1;
}
tmp=tmp->next;
}
cout<<e<<" is not found"<<endl;
return 0;
}
void Insert_elem(LinkList *L,int i,ElemType e)
{
LinkList tmp;
tmp=*L;
int j=1;
while(tmp&&j<i)
{
j++;
tmp=tmp->next;
}
LinkList inse;
inse=(LinkList)malloc(sizeof(ListNode));
inse->val=e;
inse->next=tmp->next;
tmp->next=inse;
LinkList p=*L;
p=p->next;
cout<<"After inserted A is ";
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
void Delete_elem(LinkList *L,ElemType e)
{
LinkList tmp;
tmp=*L;
LinkList q;
while(tmp->next)
{
if(tmp->next->val==e)
{
q=tmp->next;
tmp->next=q->next;
free(q);
break;
}
tmp=tmp->next;
}
LinkList p=*L;
p=p->next;
cout<<"After deleted A is ";
while(p)
{
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
void inter_sec(LinkList *A,LinkList *B)
{
LinkList a_tmp=*A;
LinkList b_tmp=*B;
a_tmp=a_tmp->next;
vector<int> arr;
while(a_tmp)
{
while(b_tmp->next)
{
if(b_tmp->next->val==a_tmp->val)
{
arr.push_back(a_tmp->val);
LinkList p=b_tmp->next;
b_tmp->next=p->next;
free(p);
break;
}
b_tmp=b_tmp->next;
}
a_tmp=a_tmp->next;
}
sort(arr.begin(),arr.end());
cout<<"A cross B is ";
for(int i=0;i<=arr.size()-1;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
void uni(LinkList *A,LinkList *B)
{
LinkList a_tmp=*A;
LinkList b_tmp=*B;
a_tmp=a_tmp->next;
b_tmp=b_tmp->next;
while(a_tmp->next)
a_tmp=a_tmp->next;
a_tmp->next=b_tmp;
LinkList a_tmp2=*A;
cout<<"A union B is ";
a_tmp2=a_tmp2->next;
while(a_tmp2)
{
cout<<a_tmp2->val<<" ";
a_tmp2=a_tmp2->next;
}
cout<<endl;
}
void show_afterSort(LinkList A)
{
vector<int> arr;
LinkList p=A->next;
while(p)
{
arr.push_back(p->val);
p=p->next;
}
sort(arr.begin(),arr.end());
cout<<"A union B in sequence is ";
for(int i=0;i<=arr.size()-1;i++)
cout<<arr[i]<<" ";
}