📄 新建 文本文档 (2).txt
字号:
连表操作!
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
struct student
{int date;
struct student *next;
};
int n;
struct student *creat(void)
{//建立连表函数
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);
cout<<"输入连表中数据:" <<endl;
cin>>p1->date;
head=NULL;
while(p1->date!=0)
{
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
cin>>p1->date;
}
p2->next=NULL;
return(head);
}
struct student *del(struct student *head,int data)
{//删除连表结点
struct student *p1,*p2;
if(head==NULL)
cout<<"连表不存在!"<<endl;
p1=head;
while(data!=p1->date&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(data==p1->date)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
cout<<"删除结点"<<data<<endl;
n=n-1;
}
else
cout<<"找不到该结点!"<<endl;
return(head);
}
struct student *insert(struct student *head,struct student *stud)
{//插入连表接点(排序插入)
struct student *p0,*p1,*p2;
p1=head;
p0=stud;
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else{
while((p0->date>p1->date)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->date<p1->date)
{
if(head==p1)
{
head=p0;
p0->next=p1;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
n++;
return(head);
}
void print(struct student *head)
{//输出连表信息
cout<<"输出连表:"<<endl;
struct student *p;
p=head;
if(head!=NULL)
do
{
cout<<p->date<<endl;
p=p->next;
}while(p!=NULL);
}
void main()
{
struct student *head,*p,*stud;
stud=(struct student *)malloc(LEN);
int data;
head=creat();
print(head);
cout<<"输入要删除的data"<<endl;
cin>>data;
head=del(head,data);
print(head);
cout<<"输入要插入的data"<<endl;
cin>>data;
stud->date=data;
stud->next=NULL;
head=insert(head,stud);
print(head);
}
///////////////////////////////////////////////////////////////////////
l合并两个连表
//#include<stdafx.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
typedef struct Lnode
{
int date;
struct Lnode *next;
}Lnode,*Linklist;
Linklist Insert(Linklist &L,Linklist&p,int n)//插入排续
{
Linklist p0,p1,p2;
p2=p1=L->next;
p0=p;
if(L->next==NULL)
{
L->next=p0;
p0->next=NULL;
}//第一个直接插在头指针后面
else
{
while((p0->date>p1->date)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}//从头往下走
if(p0->date<p1->date)
{
if(L->next=p1)
{L->next=p0;
p0->next=p1;}
else
{ p2->next=p0;
p0->next=p1;
}
}//小的往前方
else
{ p1->next=p0;
p0->next=NULL;}
}//大的直接纺后面
return(L);
}
void MergeList_L(Linklist &La,Linklist&Lb,Linklist&Lc)//合并函数
{Linklist pa,pb,pc;
pa=La->next;
pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{if(pa->date<=pb->date){
pc->next=pa;
pc=pa;
pa=pa->next;
}
else {pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}
void print(Linklist&L){//输出函数
Linklist q;
q=L->next;
while(q){
cout<<q->date<<" ";
q=q->next;
}
}
void main()
{
// InitList(&la);
// InitList(&lb);
// InitList(&lc);
Linklist La,Lb,Lc;
int n=0,m=0;
Linklist p;
cout<<"输入A链表长度 :"<<endl;
cin>>n;
cout<<"输入A链表中的数据:"<<endl;
int i=0;
La=(Linklist)malloc(sizeof(Lnode));
La->next=0;
Lb=(Linklist)malloc(sizeof(Lnode));
Lb->next=0;
for( i=0;i<n;i++)
{7
p=(Linklist)malloc(sizeof(Lnode));
cin>>p->date;
p->next=0;
La=Insert(La,p,n);
}
cout<<"第一个链表:\t"<<endl;
print(La);
cout<<endl<<"输入B链表长度 :"<<endl;
cin>>m;
cout<<"输入B链表中的数据:"<<endl;
for(i=0;i<m;i++)
{
p=(Linklist)malloc(sizeof(Lnode));
scanf("%d",&p->date);
p->next=0;
Lb=Insert(Lb,p,m);
}
cout<<"第二个链表:\t"<<endl;
print(Lb);
cout<<endl<<"合并后的表C:"<<endl;
MergeList_L(La,Lb,Lc);
print(Lc);
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -