早教吧 育儿知识 作业答案 考试题库 百科 知识分享

编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。1)建立一个带头结点的单链表。(2)计算单链表的长度,然后输出单链表。(3)查找值为x的直接前驱结点q。(4

题目详情
编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作。
1)建立一个带头结点的单链表。
(2)计算单链表的长度,然后输出单链表。
(3)查找值为x的直接前驱结点q。
(4)删除值为x的结点。
(5)把单向链表中元素逆置(不允许申请新的结点空间)。
(6)利用(1)建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。
(7)在主函数中设计一个简单的菜单,分别测试上述算法
▼优质解答
答案和解析
typedef int Elemtype;
typedef int status;
#define OVERFLOW -2
#define OK 1
#define ERROR -1
#include "stdio.h"
#include "stdlib.h"
typedef struct LNode {
Elemtype data;
struct LNode *next;
}*linklist;
//构造链表
void Create_Linklist(linklist &L)
{
linklist p;
p=(linklist)malloc(sizeof(LNode));
if(!p)
exit(OVERFLOW);
L=p;
L->next =NULL;
}
//节点插入
void Insert_Linklist(linklist &L)
{
linklist p;
int n,i;
printf("请输入插入节点的个数n: ");
scanf("%d",&n);
getchar();
for(i=n;i>0;i--)
{
p=(linklist )malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next ;
L->next =p;
}
}
//遍历输出并输出长度
status Visit_linklist(linklist &L)
{
linklist p;
int i=1;
p=L->next ;
if(L->next==NULL)
return ERROR;
while(p->next !=NULL)
{
printf("%d ",p->data );
p=p->next ;
i++;
}
printf("%d\n",p->data );
printf("长度为:%d\n",i);
return OK;
}
//查找值为x的直接前驱结点q并输出
void Search_linklist(linklist &L)
{
int x,k=0;
linklist p=L,q;
printf("输入x: ");
scanf("%d",&x);
getchar();
if(L->next ==NULL)
printf("该表为空 !\n");
while(p->next!=NULL)
{
q=p;
if(p->next ->data ==x)
{
printf("%d ",q->data );
k=1;
}
p=p->next ;
}
if(p->next &&p->data ==x)
{
printf("%d ",p->data );
k=1;
}
if(k==0)
printf("未找到值为%d的结点\n",&x);
printf("\n");
}
//删除节点
status Delete_linklist(linklist &L)
{
linklist p,q;
int k=0,x;
printf("请输入删除节点的值x: ");
scanf("%d",&x);
getchar();
if(L->next ==NULL)
return ERROR;
p=L;
q=L->next ;
while(q!=NULL)
if(q->data ==x)
{
k=1;
p=q ;
p->next =q->next ;
free(q);
q=p->next ;
}
else
{
p=q ;
q=p->next ;
}
if(k==0)
printf("表中没有值为%d的结点!\n",&x);
return OK;
}

//链表逆置
void ListInverse_linkliast(linklist &L)
{
linklist k,p,q;
p=L;
while (p->next !=NULL)
{
p=p->next ;
}
k=p;
while (L->next !=p)
{
q=L->next ;
L->next = q->next ;
k->next =q;
}
}
//链表奇偶分解
void Break_linklist (linklist &La,linklist &Lb)
{
linklist p,q;
p=La->next;
q=Lb;
while(p->next!=NULL)
{
if(p->data %2==0)
{
q->next =p;
q=q->next ;
}
p=p->next ;
}
if(p->data %2==0)
{
q->next =p;
q=q->next ;
}
}

//主菜单
void main()
{
linklist L1,L2;
printf(" (1) 建立带头节点的单链表\n");
printf(" (2) 插入节点\n");
printf(" (3) 计算链表长度并输出单链表\n");
printf(" (4) 查找值为x的直接前驱结点并输出其值\n");
printf(" (5) 删除节点值为x的结点\n");
printf(" (6) 逆置单链表结点\n");
printf(" (7) 单链表奇偶分解\n");
int choice;
printf(" 请输入选择:");
while(scanf("%d",&choice))
{
getchar();
printf("\n\n");
switch(choice)
{
case 1:
Create_Linklist(L1);
break;
case 2:
Insert_Linklist(L1);
break;
case 3:
Visit_linklist(L1);
break;
case 4:
Search_linklist(L1);
break;
case 5:
Delete_linklist(L1);
break;
case 6:
ListInverse_linkliast(L1);
break;
case 7:
Create_Linklist(L2);
Break_linklist (L1,L2);
break;
default:
printf(" 输入有误!");
break;
}
}
}
看了 编写一个完整的程序,实现单链...的网友还看了以下:

已知病毒的核酸有双链DNA、单链DNA、双链RNA和单链RNA四种类型.下列说法正确的是()A.分  2020-05-13 …

EA111 发动机的机油泵是如何驱动的( )A.排气凸轮轴通过齿形皮带驱动B.曲轴通过链条驱动C.曲  2020-05-31 …

EA111发动机高压油泵是如何驱动的( )A.曲轴通过链条驱动B.排气凸轮轴四方凸轮驱动C.进气凸轮  2020-05-31 …

高中英语第1到2册(上),(下)全部单元单词一共有几个?(加三角的除外)高中英语书第1册(上)和(  2020-06-08 …

数据结构1.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用()最节省时间。A.单链表B  2020-06-18 …

一段多核苷酸链中的碱基组成为:35%的A、20%的C、35%的G、10%的T.它是一段()A.双链  2020-07-26 …

计算机组成原理的问题在一个单地址指令的计算机系统中有一个累加器,给定以下存储器数值:地址为20的单元  2020-11-21 …

八年级上册英语单词那个,请问人教版八年级上次英语书第100页是第几单元单词.我知道现在已经改版所以现  2020-12-05 …

请高手做下数据结构的选择题谢谢!!!!!!!!!!!1,在单链表中的指定元素前插入一个数据元素,必须  2020-12-08 …

有关电极反应方程式的题!1.锌和铜单质组成原电池电解质是硝酸银溶液求正负极方程式和总反应式2.铁和碳  2021-01-24 …