Nefu 锐格实验9

本实验有关链表的基本操作,为下学期数据结构打基础

5825 查找指定结点的前驱,多组输入数据

#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
    int data;
    struct node *next;
}LNode;
LNode *search(LNode *H,int x)
{
    LNode *p,*pre;
    p=H->next;pre=H;
    while(p!=NULL&&p->data!=x)
    {
        pre=p;
        p=p->next;
        count++;
    }
    return pre;
}
int main()
{
    int n;
    int x;
    while(scanf("%d",&n)!=EOF)
    {
        LNode *H;
        H=(LNode *)malloc(sizeof(LNode));
        H->next=NULL;
        int i;
        LNode *r;
        r=H;
        for(i=0;i<n;i++)
        {
            LNode *s;
            s=(LNode *)malloc(sizeof(LNode));
            scanf("%d",&(s->data));
            s->next=r->next;
            r->next=s;
            r=s;
        }
        scanf("%d",&x);
        LNode *p;
        int *w;
        p=search(H,x);
        if(p->next==NULL)
        {
            printf("x不存在");
        }
        else if(count==0)
        {
            printf("没有前驱");
        }
        else
        {
            printf("%d",p->data);
        }
    }
    return 0;
}

5826 查找链表中有多少个值为偶数的结点

#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
    int data;
    struct node *next;
}LNode;
void *search(LNode *H)
{
    LNode *p;
    p=H->next;
    while(p!=NULL)
    {
        if((p->data%2)==0)
        {
            count++;
        }
        p=p->next;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        LNode *H;
        H=(LNode *)malloc(sizeof(LNode));
        H->next=NULL;
        int i;
        for(i=0;i<n;i++)
        {
            LNode *s;
            s=(LNode *)malloc(sizeof(LNode));
            scanf("%d",&(s->data));
            s->next=H->next;
            H->next=s;
        }
        search(H);
      printf("%d\n",count);
      count=0;
    }
    return 0;
}

5827 尾插法建立链表,之后删除其中所有值为x的结点(x有多个)

#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
    int data;
    struct node *next;
}LNode;
void search(LNode *H,int x)
{
    LNode *p,*pre;
    p=H->next;pre=H;
    while(p!=NULL)
    {
        if(p->data==x)
        {
            pre->next=p->next;
            free(p);
            p=pre->next;
        }
        else
        {
          pre=p;
          p=p->next;
        }
    }
}
void output(LNode *H)
{
    LNode *p;
    p=H->next;
    while(p->next!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;
    }
    printf("%d",p->data);
}
int main()
{
    int n;
    int x;
    while(scanf("%d",&n)!=EOF)
    {
        LNode *H;
        H=(LNode *)malloc(sizeof(LNode));
        H->next=NULL;
        int i;
        LNode *r;
        r=H;
        for(i=0;i<n;i++)
        {
            LNode *s;
            s=(LNode *)malloc(sizeof(LNode));
            scanf("%d",&(s->data));
            s->next=r->next;
            r->next=s;
            r=s;
        }
        scanf("%d",&x);
        search(H,x);
        output(H);
        printf("\n");
    }
    return 0;
}

5828 尾插法建立递增有序的链表,插入一个结点后仍然有序

#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
    int data;
    struct node *next;
}LNode;
void yxinsert(LNode *H,int x)
{
    LNode *p,*pre;
    p=H->next;pre=H;
    while(p!=NULL&&p->data<x)
    {
        pre=p;
        p=p->next;
    }
    LNode *s;
    s=(LNode *)malloc(sizeof(LNode));
    s->data=x;
    s->next=pre->next;
    pre->next=s;
}
void output(LNode *H)
{
    LNode *p;
    p=H->next;
    while(p->next!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;
    }
    printf("%d",p->data);
}
int main()
{
    int n;
    int x;
    while(scanf("%d",&n)!=EOF)
    {
        LNode *H;
        H=(LNode *)malloc(sizeof(LNode));
        H->next=NULL;
        int i;
        LNode *r;
        r=H;
        for(i=0;i<n;i++)
        {
            LNode *s;
            s=(LNode *)malloc(sizeof(LNode));
            scanf("%d",&(s->data));
            s->next=r->next;
            r->next=s;
            r=s;
        }
        scanf("%d",&x);
        yxinsert(H,x);
        output(H);
        printf("\n");
    }
    return 0;
}

5829 建立有序链表(利用上一问的有序插入函数,一个一个插入建立有序链表)

#include <stdio.h>
#include <stdlib.h>
int count=0;
typedef struct node
{
    int data;
    struct node *next;
}LNode;
void yxinsert(LNode *H,int x)
{
    LNode *p,*pre;
    p=H->next;pre=H;
    while(p!=NULL&&p->data<x)
    {
        pre=p;
        p=p->next;
    }
    LNode *s;
    s=(LNode *)malloc(sizeof(LNode));
    s->data=x;
    s->next=pre->next;
    pre->next=s;
}
void output(LNode *H)
{
    LNode *p;
    p=H->next;
    while(p->next!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;
    }
    printf("%d",p->data);
}
void create(LNode *H,int n)
{
    int i;
    int in=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&in);
        yxinsert(H,in);
    }
}
int main()
{
    int n;
    int x;
    while(scanf("%d",&n)!=EOF)
    {
        LNode *H;
        H=(LNode *)malloc(sizeof(LNode));
        H->next=NULL;
        create(H,n);
        output(H);
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>