首页 > 其他分享 >链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除

链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除

时间:2024-05-27 12:34:03浏览次数:9  
标签:head 单链 30 next 链表 法二 printf C语言 data

7-4 sdut-C语言实验-单链表中重复元素的删除

分数 20

全屏浏览

切换布局

作者 马新娟

单位 山东理工大学

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

输入格式:

第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。

输出格式:

第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

输入样例:

10
21 30 14 55 32 63 11 30 55 30

输出样例:

10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21


代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
#include <stdlib.h>
struct node
{
    int data;
    struct node*next;
};
int main()
{
    struct node*p,*head,*q,*t;
    int n,i,a;
    scanf("%d",&n);
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
    for(i=0;i<n;i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        p->next=head->next;
     scanf("%d",&p->data);
        head->next=p;
    }
    printf("%d\n",n);
    p=head->next;
    while(p)
    {
        if(p->next)
        {
            printf("%d ",p->data);
        }
        else{
            printf("%d\n",p->data);
        }
        p=p->next;
    }
    t=head->next;
    while(t)
    {
        p=t;
        q=t->next;
        while(q)
        {
            if(q->data==t->data)
            {
                p->next=q->next;
                q=q->next;
                n--;
            }
            else{
                q=q->next;
                p=p->next;
            }
        }
        t=t->next;

    }
    printf("%d\n",n);
    p=head->next;
    while(p)
    {
        if(p->next)
        {
            printf("%d ",p->data);
        }
        else{
            printf("%d\n",p->data);
        }
        p=p->next;
    }

    return 0;
}

标签:head,单链,30,next,链表,法二,printf,C语言,data
From: https://blog.csdn.net/2302_80130040/article/details/139234584

相关文章

  • 链表6(法二好理解)------ 7-6 sdut-C语言实验-有序链表的归并分数 20
    7-6sdut-C语言实验-有序链表的归并分数20全屏浏览切换布局作者 马新娟单位 山东理工大学分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。输入格式:第一行输入M与......
  • 深度剖析整型和浮点型数据在内存中的存储(C语言)
    目录整型在内存中的存储为什么整型在内存中存储的是补码?大小端字节序为什么有大端小端?浮点型家族浮点数在内存中的存储longlong整型在内存中的存储    整型在内存中有三种二进制表示形式:原码,反码,补码。对于正数而言,三种形式均有符号位和数值位两部分(最高......
  • 单链表
    单链表是内存地址不连续排列的线性表。单链表每个结点都有两个地址,第一个位置存储数据,第二个位置存储下个结点的内存地址。classNode(object):"""单链表结点"""def__init__(self,val):#_item存储数据self.val=val#_next是下一个......
  • 【C语言】自定义类型:联合与枚举的简明概述
    ......
  • C语言学习——程序中的循环结构
    目录一、while循环二、do...while循环三、for循环四、三种循环的比较不同一、while循环while循环语句基本结构如下 :while(条件)//条件为逻辑值,判断真假{循环语句;}while语句的语义是:计算表达式的值,当值为真(非零)时,执行循环语句。 1.循环条件必须被改变,否则......
  • C语言基础
    相关知识点:由冯.诺依曼提出的“存储程序”:      1.采用“存储程序”的工作方式。   2.计算机系统组成:运算器、存储器、控制器、输入设备、输出设备。   3.指令和数据同等地位存储在存储器中。   4.指令和数据均用二进制代码表示;指令由操作码和地址码......
  • C语言指针应用编程
    实验11.1点击查看代码#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);......
  • 【C语言】C语言零基础纯干货教学(下)
    个人主页~C语言零基础纯干货教学(上)C语言零基础纯干货教学(中)C语言入门四、数组1、概念2、一维数组(1)一维数组创建(2)数组的初始化3、一维数组的使用(1)访问下标(2)数组输入和打印4、一维数组在内存中的存储5、sizeof计算数组元素个数6、二维数组(1)概念(2)二维数组的创建7、......
  • 【考研数据结构知识点详解及整理——C语言描述】第二章线性表的定义和基本操作
    25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!目录 一.线性表的定义二.线性表的基本操作一.线性表的定义(1)线性表是具有相同数据类型的n(n>0)个数据元素的有......
  • 【C语言】10.C语言指针(1)
    文章目录1.内存和地址1.1内存1.2究竟该如何理解编址2.指针变量和地址2.1取地址操作符(&)2.2指针变量和解引⽤操作符(*)2.2.1指针变量2.2.2如何拆解指针类型2.2.3解引⽤操作符2.3指针变量的⼤⼩3.指针变量类型的意义3.1指针的解引⽤3.2指针+-整数3.3void*指针......