内存:128  时间:1

题目描述

实现链表的插入操作 bool ListInsert(LinkList *&L,int i,ElemType e) 在链表L的第i个位置插入数据元素e(i从1开始)。 假设顺序表的元素类型为char,主函数及其他函数已给出。

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;
} LinkList;
void InitList(LinkList *&L)  //初始化线性表
{
    L=(LinkList *)malloc(sizeof(LinkList));   //创建头结点
    L->next=NULL;
}
void DestroyList(LinkList *&L) //销毁线性表
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);
}
bool ListEmpty(LinkList *L) //判线性表是否为空表
{
    return(L->next==NULL);
}
int ListLength(LinkList *L) //求线性表的长度
{
    LinkList *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkList *L) //输出线性表
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%c ",p->data);
        p=p->next;
    }
    printf("
");
}

int main()
{
    ElemType a,b,c,d,e,f;
    LinkList *h;
    InitList(h);
    printf("依次采用尾插法插入a,b,c,d,e元素
");
    scanf("%c %c %c %c %c%*c",&a,&b,&c,&d,&e);
    ListInsert(h,1,a);
    ListInsert(h,2,b);
    ListInsert(h,3,c);
    ListInsert(h,4,d);
    ListInsert(h,5,e);
    DispList(h);
    printf("单链表h长度=%d
",ListLength(h));
    printf("在第4个元素位置上插入f元素
");
    scanf("%c",&f);
    ListInsert(h,4,f);
    DispList(h);
    DestroyList(h);
    return 0;
}

注意:只提交bool ListInsert(LinkList *&L,int i,ElemType e)部分。

输入

输入生成链表的5个元素a,b,c,d,e

输入插入链表第4个位置的元素f

输出

输出链表长度

输出插入操作后的链表

样例输入

1 3 5 7 9
6

样例输出

依次采用尾插法插入a,b,c,d,e元素
1 3 5 7 9
单链表h长度=5
在第4个元素位置上插入f元素
1 3 5 6 7 9

提示

请使用C++编译并提交

代码如下


#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;
} LinkList;
void InitList(LinkList *&L)  //初始化线性表
{
    L=(LinkList *)malloc(sizeof(LinkList));   //创建头结点
    L->next=NULL;
}
 bool ListInsert(LinkList *&L,int i,ElemType e) ;
void DestroyList(LinkList *&L) //销毁线性表
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);
}
bool ListEmpty(LinkList *L) //判线性表是否为空表
{
    return(L->next==NULL);
}
int ListLength(LinkList *L) //求线性表的长度
{
    LinkList *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
void DispList(LinkList *L) //输出线性表
{
    LinkList *p=L->next;
    while (p!=NULL)
    {
        printf("%c ",p->data);
        p=p->next;
    }
    printf("
");
}

int main()
{
    ElemType a,b,c,d,e,f;
    LinkList *h;
    InitList(h);
    printf("依次采用尾插法插入a,b,c,d,e元素
");
    scanf("%c %c %c %c %c%*c",&a,&b,&c,&d,&e);
    ListInsert(h,1,a);
    ListInsert(h,2,b);
    ListInsert(h,3,c);
    ListInsert(h,4,d);
    ListInsert(h,5,e);
    DispList(h);
    printf("单链表h长度=%d
",ListLength(h));
    printf("在第4个元素位置上插入f元素
");
    scanf("%c",&f);
    ListInsert(h,4,f);
    DispList(h);
    DestroyList(h);
    return 0;
}bool ListInsert(LinkList *&L,int i,ElemType e)
{
	LinkList *p=L ;
	LinkList *pe ;
	LinkList *pr ;
	int len =ListLength(L);

	int j = 0 ;
	if(i==1 &&len==0)
	{
		pe =(LinkList *)malloc(sizeof(LinkList));
		pe->data = e ;
		pe->next =NULL ;
		L->next = pe ;
		
	}
	else if (i>1 && i<=len)
	{
			
	while(p->next&& ( --i))
	{
		p=p->next ;	
	}
	pe =(LinkList *)malloc(sizeof(LinkList));
	pe->data = e ;
	pe->next=NULL;
	pe->next =p->next ;
	p->next =pe;
	
}
else
{
	pe =(LinkList *)malloc(sizeof(LinkList));
	pe->data = e ;
	pe->next=NULL;
	while(p->next)
	{
		
		p=p->next ;
	}
	p->next =pe ;
	
	
}
	
	
	return true ;
	
}

代码来源于互联网,仅供参考!