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

实验1单链表操作基本要求(1)建立头指针为h的带表头结点的单链表;(2)输出单链表的数据域值;(3)输入x,y,在第一个x之后插入结点y,若无结点x,则在表尾插入结点y(输出插

题目详情
实验1 单链表操作
【基本要求】
(1)建立头指针为h的带表头结点的单链表;
(2)输出单链表的数据域值;
(3)输入x,y,在第一个x之后插入结点y,若无结点x,则在表尾插入结点y(输出插入之后的单链表数据域值);
(4)输入k,删除单链表中所有结点值等于k的结点,并输出被删结点的个数。
【测试数据要求】
(1)单链表长度大于10,且表中元素要有重复值。
(2)输入至少两组x,y,分别满足:找到x,在x之后插入;找不到x,在表尾插入。
(3)输入三组k值,分别满足表中删除k的个数等于0,等于1 和大于1三种情况。
【实现提示】
前插法建立单链表:建立链表时新结点总插在表中第一个结点之前;
后插法建立单链表:新结点总是插在表中最后一个结点之后,此时最好另设一尾指针,指向当前最后一个结点。
删除k结点时,需知道前驱结点的指针。
急!急!跪求!
▼优质解答
答案和解析

是用C还是C++?

你没说的话,只能给你个参考程序!

#include <iostream>
using namespace std;
typedef char ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;
void Creat_List(LinkList L)//创建单链表并输入元素
{
LinkList p;
char ch;
cout<<"请输入链表元素,并且以输入#表示结束!"<<endl;
while(cin>>ch&&ch!='#')
{
p=(LinkList)malloc(sizeof(Lnode));
if(!p)
{
cout<<"获取内存失败"<<endl;
exit(ERROR);
}
p->data=ch;//尾插法
L->next=p;
L=p;
}
L->next=NULL;
}
void output_List(LinkList L)//遍历单链表(输出单链表元素)
{
LinkList p;
p=L->next;
if(p==NULL)
{
cout<<"该链表是空链表!"<<endl;
exit(ERROR);
}
while(p!=NULL)
{
cout<<p->data<<"   ";
p=p->next;
}
}
void List_Delete(LinkList L,int i)//删除指定位置的元素
{
LinkList q;
if(i<1)
{
cout<<"删除位置非法(过小)!"<<endl;
exit(ERROR);
}
int j=0;
while(L!=NULL&&j<i-1)
{
L=L->next;
j++;
}
if(L->next==NULL)
{
cout<<"删除位置非法(过大)!"<<endl;
exit(ERROR);
}
q=L->next;
L->next=q->next;
free(q);
}
void List_Inster(LinkList L,int i,ElemType e)//在指定位置插入元素
{
LinkList s;
int j=0;
while(L!=NULL&&j<i-1)
{
L=L->next;
j++;
}
if(!L||j>i-1)
{
cout<<"插入位置非法!"<<endl;
exit(ERROR);
}
s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=L->next;
L->next=s;
}
Status main()
{
LinkList H;
H=(LinkList)malloc(sizeof(Lnode));
H->next=NULL;
    Creat_List(H);
output_List(H);
int n;
cout<<"请输入要删除的元素的位置!"<<endl;
cin>>n;
List_Delete(H,n);
    cout<<"删除元素后的链表为:"<<endl;
output_List(H);
cout<<"请输入插入的位置和元素!"<<endl;
ElemType m;
cin>>n>>m;
List_Inster(H,n,m);
    output_List(H);
return 0;
}