王道c语言督学 数据结构中级day 5

输入3 4 5 6 7 9999一串整数,9999代表结束,通过尾插法新建链表,查找第二个位置的值并输出,在2个位置插入99,输出为  3 99  4  5  6  7,删除第4个位置的值,打印输出为  3 99  4  5  6  7。

输出函数如下:

void PrintList(LinkList L)

{
L = L->next;

while (L != NULL)

{
printf("%3d", L->data);//打印当前结点数据

L = L->next;//指向下一个结点

}

printf("\n");

}

 

我的代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct LNode
{
     Elemtype data;
     struct LNode *next;
}LNode,*Linklist;

//定义一个输出函数 
void print(Linklist L)
{
    L=L->next;
    while(L->next!=NULL)
     {
         L=L->next;
        printf("%3d",L->data);
    } 

}
//查找某个序号的值 
Linklist GetElem(Linklist L,int x)
{
    LNode*p=L->next;
    int j=1;
    if(x==0&&x<1)
    {
        return L; 
    }
    while(p!=NULL&&j<x)
    {
        p=p->next;
        j++;        
    }
    return L;
}

//通过尾插法建立单链表 
Linklist creatlist(Linklist &L)//通过尾插法建立单链表 
{
    int x;
    L=(LNode *)malloc(sizeof(LNode)); //建立新的节点 
    LNode *p,*s=L;//将L的地址赋给p和s,使他们指向链表 
    scanf("%d",&x); 
    while(x!=9999)
    {
        s=(LNode *)malloc(sizeof(LNode));//建立新的节点 
        s->data=x;        //赋到s节点的数据域 
        p->next=s;
        p=s;   //将s所存地址赋给p,p指向新的节点 
        scanf("%d",&x);//循环赋值 
            
    }
        p->next=NULL;//直到指针域为空时停止 
        return L;
}

//根据题目条件插入节点 
Linklist tailinsert(Linklist &L,int x)//根据题目条件插入 
{
    L=(LNode *)malloc(sizeof(LNode)); //建立新的节点 

    LNode*p,*s;
    LNode *s=L;//将L的地址赋给s,使他们指向链表 
    LNode*p=GetElem(L,x-1);//找到插入序号的前一个节点,并将地址赋给指针p,使其指向前面的节点 
        s=(LNode *)malloc(sizeof(LNode));//建立新的节点 
        s->data=99;        //赋到s节点的数据域              s->next=p->next;
        p->next=s;//让节点p的指针域指向s 
        p=s;   //将s所存地址赋给p,p指向新的节点 
        scanf("%d",&x);//循环赋值 
        p->next=NULL;//直到指针域为空时停止 
        return L;
}

//删除节点 
Linklist Delete(Linklist L,int x)
   {
       LNode *p=GetElem(L,x-1);
       LNode *s=GetElem(L,x);//指向需要删除的节点 
       p->next=s->next;//将s下一个节点的地址赋给p的指针域,p的指针域则指向s的下一个节点 
       p=s->next;//工作指针p指向s节点的下一个节点 
       free(s);
       return p;
   }
   
   int main()
   {
       Linklist L;
       GetElem(L,2);
       creatlist(L);
       LNode *s; //和Linklist s同样的效果 
    s=GetElem(L,2); 
    printf("%d",s->data);
    printf("插入节点序号为2的地方");
       tailinsert(L,2);
       print(L);
    printf("删除的序号为4的地方");
       Delete(L,4);
       print(L);
       
   }
————————————————
版权声明:本文为CSDN博主「永驹我心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52297878/article/details/125793794

通信跨考计算机,不对的地方可以一起讨论一下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值