#include<iostream>
using namespace std;
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
//前插法
void create_H(LinkList *L,int n){
int i;
LinkList p;
*L=new Lnode;
(*L)->next=NULL;
cout<<"请输入n个结点的元素值\n";
for(i=0;i<n;i++){
p=new Lnode;
cin>>p->data;
p->next=(*L)->next;
(*L)->next=p;
}
}
//后插法
void create_R(LinkList *L,int n){
int i;
LinkList p,q;
*L=new Lnode;
(*L)->next=NULL;
q=*L;
cout<<"请输入n个结点的元素值\n";
for(i=0;i<n;i++){
p=new Lnode;
cin>>p->data;
p->next=NULL;
q->next=p;
q=p;
}
}
void print(LinkList L){
LinkList p = L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<"\n";
}
void insert(LinkList *L,int i,int e){
LinkList p,s;
p=*L;
int j=0;
while(p&&(j<i-1)){
p=p->next;
++j;
}
if(!p||j>i-1)
cout<<"error";
else{
s=new Lnode;
s->data=e;
s->next=p->next;
p->next=s;
}
}
void del(LinkList *L,int i){
LinkList p,q;
int j=0;
p=*L;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!(p)||(j>i-1))
printf("error");
q=p->next;
p->next=q->next;
delete q;
}
void get(LinkList L,int i,int *e){
int j;
LinkList p;
p=L->next;
j=0;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i)
printf("error");
*e=p->data;
}
void clear(LinkList *L){
LinkList p,q;
p=(*L)->next;
while(p){
q=p->next;
delete q;
p=q;
}
(*L)->next=NULL;
}
//链表A,B合成一个C,
void merge(Lnode *A,Lnode *B,Lnode *&C){
Lnode *p=A->next;
Lnode *q=B->next;
Lnode *r;
C=A;
C->next=NULL;
free(B);
r=C;
while(p!=NULL&&q!=NULL){
if(p->data<=q->data){
r->next=p;
p=p->next;
r=r->next;
}else{
r->next=q;
q=q->next;
r=r->next;
}
}
r->next=NULL;
if(p!=NULL)
r->next=p;
if(q!=NULL)
r->next=q;
}
int main(){
LinkList L;
int n,i,e,e1;
cout<<"请输入链表的个数\n";
cin>>n;
create_R(&L,n);
print(L);
get(L,2,&e1);
printf("%d \n",e1);
cout<<"请输入插入的位置i与值e \n";
cin>>i>>e;
insert(&L,i,e);
cout<<"插入后的链表\n";
print(L);
del(&L,i);
cout<<"被删除后的链表";
print(L);
printf("清空表后的表\n");
print(L);
return 0;
}
单链表基本操作
最新推荐文章于 2023-08-16 17:51:34 发布