大家好,我是小夏,我来为大家解答以上问题。c++实现链表的基本操作,链表的基本操作很多人还不知道,现在让我们一起来看看吧!
给你一段参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Node;
void Print(Node *HA,Node *HB,Node *HC);
void Choose(int choice,Node *HA,Node *HB,Node *HC);
void CreateChain(Node *H);
void PrintChain(Node *H);
void Combine(Node *HA,Node *HB,Node *HC);
int main(void)
{
Node *HA;
Node *HB;
Node *HC;
HA=(Node *)malloc(sizeof(Node));
HB=(Node *)malloc(sizeof(Node));
HC=(Node *)malloc(sizeof(Node));
HA->next=NULL;
HB->next=NULL;
HC->next=NULL;
Print(HA,HB,HC);
while(true)
{
printf("按enter键继续操作...");
getchar();
getchar();
system("cls");
Print(HA,HB,HC);
}
return 0;
}
void Print(Node *HA,Node *HB,Node *HC)
{
int choice;
printf("Made By 杨梅树的盔甲~O(∩_∩)O~ ");
printf("--------------------- ");
printf("1.建立新的递增单链表A. ");
printf("2.输出当前线性表A. ");
printf("3.建立新的递增单链表B. ");
printf("4.输出当前线性表B. ");
printf("5.将表A和表B归并为表C. ");
printf("6.输出当前线性表C. ");
printf("--------------------- ");
printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice,HA,HB,HC);
}
void Choose(int choice,Node *HA,Node *HB,Node *HC)
{
switch(choice)
{
case 1:
CreateChain(HA);
break;
case 2:
PrintChain(HA);
break;
case 3:
CreateChain(HB);
break;
case 4:
PrintChain(HB);
break;
case 5:
Combine(HA,HB,HC);
break;
case 6:
PrintChain(HC);
break;
default:
exit(0);
}
}
//尾插法建递增单链表,并检查单链表是否为递增
void CreateChain(Node *H)
{
Node *s;
Node *p;//动态指向表尾
p=H;
int n;
int i;
//输入N,并判断N是否合法
while(true)
{
printf("请输入单链表长度:");
scanf("%d",&n);
if(n>0)
{
break;
}
else
{
printf("Error:单链表的长度必须大于零! ");
}
}
//for(i=0;i<n;i++)
//{
// s=(Node *)malloc(sizeof(Node));
// scanf("%d",&s->data);
// s->next=p->next;
// p->next=s;
// p=p->next;
//}
//输入单链表并判断其合法性
while(true)
{
int flag;
printf("请输入单链表: ");
H->next=NULL;//警告!此处必须再次初始化!以确保重复建表的无误!!!!!(十分重要!!!)
p=H;//动态指向表尾
for(i=0;i<n;i++)
{
s=(Node *)malloc(sizeof(Node));
scanf("%d",&s->data);
s->next=p->next;
p->next=s;
p=p->next;
}
//检查建表的合法性
//当非法建表时最好先释放错误链表的内存(待改善)
p=H->next;
flag=1;
while(p->next!=NULL)
{
if(p->data<=p->next->data)
{
p=p->next;
}
else
{
flag=0;
printf("Error:建表非法!单链表必须为递增! ");
break;
}
}
if(flag)break;
}
printf("成功创建新单链表! ");
PrintChain(H);
}
void PrintChain(Node *H)
{
printf("当前单链表为: ");
Node *p;
p=H->next;
if(p==NULL)
{
printf("空表 ");
}
else
{
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf(" ");
}
}
void Combine(Node *HA,Node *HB,Node *HC)
{
Node *pa;
Node *pb;
Node *pc;
Node *temp;
HC->next=NULL;//初始化,保证重复操作的正确性
pa=HA;
pb=HB;
pc=HC;
while(pa->next!=NULL && pb->next!=NULL)
{
if(pa->next->data<=pb->next->data)
{
temp=pa->next->next;
pa->next->next=pc->next;
pc->next=pa->next;
pc=pc->next;
pa->next=temp;
}
else
{
temp=pb->next->next;
pb->next->next=pc->next;
pc->next=pb->next;
pc=pc->next;
pb->next=temp;
}
}
while(pa->next!=NULL)
{
temp=pa->next->next;
pa->next->next=pc->next;
pc->next=pa->next;
pc=pc->next;
pa->next=temp;
}
while(pb->next!=NULL)
{
temp=pb->next->next;
pb->next->next=pc->next;
pc->next=pb->next;
pc=pc->next;
pb->next=temp;
}
printf("归并成功! ");
}
本文到此讲解完毕了,希望对大家有帮助。