首页 > 编程语言 >2023数据结构408程序题C语言

2023数据结构408程序题C语言

时间:2024-08-29 19:58:12浏览次数:12  
标签:int 元素 number next Num 2023 new C语言 408

如A=(0,5,5,3,5,7,5,5),则5为主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设 A 中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A 的主元素。若存在主元素,则输出该元素;否则输出-1。

#include <stdio.h>
#include <stdlib.h>
//定义结构体数组S,其中的元素不仅有值,还有该值在S中出现的次数。
#define length 8
typedef struct Num
{
    int data;        //数据元素
    int number;  //对应出现的次数
    struct Num *next;
}Num;

Num *new()
{
    Num *new=(Num *)malloc(sizeof (Num));
    new->data=0;
    new->number=0;
    new->next=NULL;
    return new;
}

int main_element(int in[],int n)
{

    Num *Numhead=NULL;
    for(int i=0;i<n;i++)//往链表中添加数据及其对应出现的次数
    {
        if(Numhead==NULL)   //第一个链表头
        {
            Numhead =new();
            Numhead ->data=in[i];
            Numhead ->number++;

        }
        else
        {
            Num *p=Numhead;    //循环遍历的指针
            Num *p1=Numhead;   //用于添加元素的指针
            do     //遍历链表并对比添加每个数据在数组中出现的次数
            {
                if(p->data==in[i])
                {
                    p->number++;
                    break;
                }
                else
                {

                    if(p->next!=NULL)
                    {
                         p1=p->next;
                    }
                    p=p->next;
                }
            }
            while(p!=NULL) ;

            if(p==NULL)//链表中不存在,则创建一个结构体元素接在链表未
            {
                p1->next=new();
                p1->next->data=in[i];
                p1->next->number++;
            }
        }
    }

    Num *p=Numhead;
    int max=-1;
    int maxnum=0;
    while (p!=NULL)     //遍历链表寻找出现最多的数据
    {
        //printf("数据元素 %d 次数:%d\n",p->data,p->number);
        if(max<p->number)
        {
            max=p->number;
            maxnum=p->data;
        }
        p=p->next;
    }
    if(n%2==1)      //判断数组大小的奇偶
    {
        if(max>n/2+1)  //如果为奇数
        {
            return maxnum;
        }
        else
        {
            return -1;
        }
    }
    else {
        if(max>n/2)    //如果为偶数
        {
            return maxnum;
        }
        else
        {
            return -1;
        }
    }

}
int main()
{

    int in[length]={0,5,5,3,5,7,5,5};                 //测试数据
    int num= main_element(in,length);
    if(num==-1)
    {
        printf("没有主元素\n");
    }
    else {
        printf("主元素为%d\n",  main_element(in,length));
    }
    return 0;
}

标签:int,元素,number,next,Num,2023,new,C语言,408
From: https://blog.csdn.net/bobo123355566/article/details/141676928

相关文章

  • C语言基础——函数详解
    目录 函数的概述1函数的概念2函数的意义 函数的定义和使用1函数的定义2函数的调用2.1在同一文件中函数定义后函数调用2.2在同一文件中函数定义前函数调用2.3调用其它文件中定义的函数2.3.1在函数调用文件中进行声明2.3.2在头文件中进行函数的声明 函......
  • 华为20240821笔试第一题笔记
    https://mp.weixin.qq.com/s?__biz=MzkyNTQ3NDAzNw==&mid=2247489703&idx=1&sn=96d3f883998b4bbb395dfc5f08906399&chksm=c02307cb0d07e5b4e7140350b08b20bd7b5ba950886d62a60f44af3bc6c070c1031827edc979&mpshare=1&scene=1&srcid=0821m7WJaqagZ......
  • 王道C语言(备份)
    指针与一维数组函数调用的本质是值传递数组传递是弱化为指针如果指针变量已指向数组中的一个元素,则p+1指向同一数组的下一个元素,执行p+1并不是将p的值(地址)加1,而是加上一个数组元素所占用的字节数。#include<stdio.h>intmain(){ inta[3]={2,7,8}; int*p; intj;......
  • C语言 备份
    scanf读取原理行缓冲:标准缓存区读入字符‘20\n’,会打印输出20,紧接着的scanf,会打印输出\n,标准输入缓冲区有\n,scanf(c=%c,&c),直接读取缓冲区的\n字符输出。scanf匹配规则:scanf函数在读取整型数、浮点数、字符串会忽略'\n'字符判断闰年#include<stdio.h>intmain(){ in......
  • T240829 【用Liouville定理证明代数学基本定理】
    [T240829]代数学基本定理:在复平面上次数大于\(1\)的一元多项式至少有一个零点.引理(Liouville)有界整函数\(f(z)\)必为常数.证:设\(|f(z)|\)有上界\(M\).即\(\forallz\in\C,~|f(z)|\leM\).于是由Cauchy不等式,对\(\foralla\in\C\),有\[0\le|f'(a)|\le......
  • Alias Autostudio2023软件下载Alias2022软件下载安装包(全版本)
    AliasAutostudio是一款由Autodesk公司开发的概念设计和3D建模软件。它主要用于汽车、工业产品等概念设计阶段,具有以下核心功能:-快速造型-内置丰富的基本造型工具,可以快速生成设计概念构思。-灵活编辑-使用子分模型方式组织数据,支持多种方式编辑模型。-渲染与......
  • inventor软件下载-Autodesk Inventor各版本下载-inventor2023
    Inventor是Autodesk公司推出的三维机械CAD软件,用于机械产品的数字原型设计和仿真模拟。Inventor的主要功能包括:-三维机械建模-包含丰富的机械设计工具,可以快速设计机械产品。-大组装设计-支持大规模机械系统的组装设计。-机械动画仿真-可以进行运动学和动力......
  • C语言涉及问题(文件IO与数组和指针)
    一、文件IO相关1、标准出错、输入、输出三者的缓冲机制是什么?标准出错(stderr):属于不缓冲机制,数据直接写入设备标准输入(stdin)和标准输出(stdout):属于行缓冲和全缓冲,行缓冲时需要用'\n'分隔,全缓冲是缓冲区满才会写入或者输出。冲刷缓冲函数:fflush();无论是如果想将全缓冲......
  • C语言--运算符3
    自增自减运算符i++,i--运算符在后,在表达式中先用i的值,下条语句i的值自增或者自减#include<stdio.h>intmain(){inti=1;intnum;num=i++;printf("num=%d,i=%d\n",num,i);//num=1,i=2return0;}++i先加,后用#include<stdio.h>intmain(){inti=1;intnum;......
  • 【408DS算法题】028基础-查找二叉树的最大值结点
    Index题目分析实现总结题目给定二叉树的根节点,找到二叉树中结点值最大的结点。分析实现对于查找二叉树中的最大值结点,在二叉树的遍历(DFS、层次遍历)的基础上进行修改可以轻松地达成这一目的。本文中选用的是相对直观的后序遍历,具体实现如下:BTNode*findMax(BTN......