顺序表基本练习-初始化、插入和输出_第一关:需要编写顺序表的初始化、插入相关操作来完成顺序表的建表操作;编写输出函-程序员宅基地

技术标签: 《 数据结构与算法 》  算法  c语言  数据结构  开发语言  

目录

问题描述 

程序设计 

程序分析

本节文章


问题描述 

【问题描述】

实现可变长顺序表的建表过程。任务要求:通过顺序表的初始化、插入算法,实现顺序表的建表,并依次输出顺序表元素。

【输入形式】

第一行输入整数N(1<=N<=100),表示创建长度为N的顺序表;

第二行输入N个整数,表示顺序表的N个元素,依次放入表中;

【输出形式】

依次输出顺序表的全部元素。(以空格分隔)

【样例输入】

5

1 2 3 4 5

【样例输出】

1 2 3 4 5

【样例说明】

程序设计 

#include<stdio.h>
#include<malloc.h>
typedef struct Node{
    int data;
    struct Node *next;
}Node,*PNode;
PNode Init(){
    PNode H=(PNode)malloc(sizeof(Node));
    H->next=NULL;
    return H;
}
int Create(PNode H,int n){
    int i,e;
    PNode p=H;
    for(i=0;i<n;i++){
        scanf("%d",&e);
        PNode q=(PNode)malloc(sizeof(Node));
        q->next=NULL;
        q->data=e;
        p->next=q;
        p=q;
    }
    return 1;
}
int Print(PNode H){
    PNode p=H->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return 1;
}
int Insert(PNode H,int m){
    int pos,e,i,j;
    PNode p;
    for(i=0;i<m;i++){
        p=H;
        j=0;
        scanf("%d %d",&pos,&e);
        while(j<pos-1&&p){
            p=p->next;
            j++;
        }
        if(j>pos-1||!p){
            printf("error\n");
        }else{
            printf("yes\n");
            PNode q=(PNode)malloc(sizeof(Node));
            q->data=e;
            q->next=NULL;
            q->next=p->next;
            p->next=q;
        }
    }    
    return 1;
}
int main(){
    PNode H;
    int n,m;
    H=Init();
    scanf("%d %d",&n,&m);
    Create(H,n);
    Insert(H,m);
    Print(H);
    return 0;
}

程序分析

这是一道链表基础题,给定一个链表,要求在指定位置插入元素并输出。

首先,需要定义链表结点的结构体类型。因为题目中数据元素是整数,所以结点的数据域可以定义为 int 类型。

其中,`*PNode` 表示指向 `Node` 结构体类型的指针。为了方便,我们可以直接定义 `Node` 的指针类型 `PNode`。

其次,需要实现初始化链表、创建链表、插入元素和输出链表等函数。

函数 `Init()` 用于初始化链表。在该函数中,首先使用 `malloc()` 动态分配一块内存来存储头结点,然后将头结点的指针域 `next` 设为 `NULL`,最后返回头结点的地址。

函数 `Create()` 用于创建链表。在该函数中,首先从标准输入中读取链表的元素个数,然后依次读入每个元素,并将其插入链表中。其中,创建新结点需要使用 `malloc()` 动态分配内存,并将新结点的指针域 `next` 设为 `NULL`,然后再将新结点插入到链表的末尾。

函数 `Insert()` 用于在链表指定位置插入元素。在该函数中,首先从标准输入中读取需要插入元素的个数 `m`,然后循环 `m` 次,每次从标准输入中读入需要插入的位置 `pos` 和元素值 `e`。接着,从头结点开始遍历链表,找到第 `pos-1` 个结点,然后将新结点插入到该结点之后即可。

最后,函数 `main()` 中调用上述函数来实现功能。首先初始化链表并从标准输入中读取链表的元素个数 `n` 和需要插入元素的个数 `m`,然后调用 `Create()` 函数创建链表。接着,调用 `Insert()` 函数插入元素,并最终调用 `Print()` 函数输出链表。

本节文章

顺序表
1 C语言实现顺序表的插入、删除 https://want595.blog.csdn.net/article/details/126967798
2 顺序表基本练习-初始化、插入和输出 https://want595.blog.csdn.net/article/details/127737121
3 顺序表基本练习-删除元素 https://want595.blog.csdn.net/article/details/127737165
4 顺序表基本操作-查找 https://want595.blog.csdn.net/article/details/127737191
5 顺序表删除重复元素 https://want595.blog.csdn.net/article/details/126998125
6 顺序表实现集合并集 https://want595.blog.csdn.net/article/details/127737454
7 顺序表元素循环左移(new) https://want595.blog.csdn.net/article/details/128281975
8 删除顺序表中最小值 https://want595.blog.csdn.net/article/details/126984319
9 递增顺序表插入 https://want595.blog.csdn.net/article/details/126990708
10 将顺序表非零元素依次移到表的前端 https://want595.blog.csdn.net/article/details/127737349
11 删除顺序表中第一个值等于x的元素 https://want595.blog.csdn.net/article/details/127619864
12 在顺序表中,输入一个元素插入到原表的最小元素之前 https://want595.blog.csdn.net/article/details/127365247
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_68111267/article/details/127737121

智能推荐

计算机的外围设备简介_计算机外围固定-程序员宅基地

文章浏览阅读6.1k次,点赞3次,收藏5次。外围设备介绍计算机的外围设备(简称外设)虽然很多,但按功能分大类只有四类:输入、输出、存储、网络通讯。有些专业计算机需要的外围设备也不尽相同,并不都需要这四类外围设备。外围设备可以按需要组装,有些专业计算机甚至可以将存储设备和主芯片集成到一片芯片上,从而不再需要外加存储设备。最早的计算机(那时还只能称为计算器,只能做简单运算,如ABC机和ENIAC机)输入只是一些拨码开关,只能输入数字(还得是二进_计算机外围固定

java 图片中加文字_java怎么在图片上加文字-程序员宅基地

文章浏览阅读1.5k次。java 图片中加文字_java怎么在图片上加文字

GBase8cGDCA认证模拟题题库(三)_如果需要打开delete语句的审计功能,需要开启下面哪个参数-程序员宅基地

文章浏览阅读720次,点赞20次,收藏6次。B 选项,在创建模式时,可以不指定模式名。C 选项,兼容模式可选值为 AB、C、PG.安装GBase 8c分布式集群时所需的配置文件gbase.yml,在解压GBase8cV5 S3.0.0BXX CentOS x86 64.tar.bz2压缩包生成的目录中得到。真值的有效文本值是: TRUE、t、"true'、y、yes'、"1'TRUE'、true、整数范围内1~2^63-1、整数范围内-1~-2^63。GBase 8c 使用create table 创建表时,不指定参数,默认是astore,行存表。_如果需要打开delete语句的审计功能,需要开启下面哪个参数

xml文件中几个名词_xml文件里面的名词-程序员宅基地

文章浏览阅读334次。1 xmlns是XML Namespaces的缩写,中文名称是XML(标准通用标记语言的子集)命名空间。 web-app是web.xml的根节点标签名称 version是版本的意思 xmlns是web.xml文件用到的命名空间 xmlns:xsi是指web.xml遵守xml规范 xsi:schemaLocation是指具体用到的schema资源_xml文件里面的名词

【OpenGL】中点圆、椭圆生成算法_用setpixel函数中点画圆算法代码c++-程序员宅基地

文章浏览阅读1.6w次,点赞12次,收藏69次。OpenGL 中点圆、椭圆生成算法_用setpixel函数中点画圆算法代码c++

HTML-CSS实现背景图片出现不同的位置_css背景图高度占据一半另一半有别的背景色-程序员宅基地

文章浏览阅读2.1k次。首先在HTML中写入div,命名为img,在这个div中加入一个span标签并命名为img-bg和img50(5星为50).<div class="img"> <span class="img-bg img50"></span> <span class="img-bg img45"></span> <span class="img-bg img40"></span> </div> 在css代码._css背景图高度占据一半另一半有别的背景色

随便推点

Android MPAndroidChart:动态添加统计数据线【8】_android 动态统计-程序员宅基地

文章浏览阅读3.9k次。Android MPAndroidChart:动态添加统计数据线【8】本文在附录相关文章6的基础上,动态的依次增加若干条统计折线(相当于批量增加数据点)。布局文件:

vmware中的linux虚拟机如何增加磁盘容量_linux虚拟机磁盘空间不足-程序员宅基地

文章浏览阅读6.3k次。vmware中 centos的磁盘大小 20G->30G现象:fdisk -l可以看到增大后的磁盘总量,但是需要增加分区并格式化然后挂载才能使用.一、vmware中的设置先关闭虚拟机vm->settings->hard disk->utilities->expand->输入大小(增加后的大小)二、启动虚拟机,进入命令行1、 fdisk /dev/sda进入命令行Comman_linux虚拟机磁盘空间不足

Hadoop2.7.3下Mysql8.0下Hive2.3.8的安装_hive2.3.8安装-程序员宅基地

文章浏览阅读927次。hive安装前提:1.基于hadoop2.7的完全分布式集群搭建完成hadoop2.7集群搭建2.MySQL8.0安装完成 安装centos7上MySQL8.0Hive2.3.8的安装下载链接:https://mirrors.tuna.tsinghua.edu.cn/apache/下滑找到hive点击进去点击hive2.3.9(hive2.3.9和hive2.3.8差别不大)下载画红线的也就是bin.tar.gz后缀的hive解压安装下载完成后通过xftp传到虚拟机上(基操不在赘述)_hive2.3.8安装

The‘grub-efi-amd64-signed‘ package failed to install into /target/. Without the GRUB boot loader,_the grub-efiamd64-signed' package failed to instal-程序员宅基地

文章浏览阅读430次,点赞8次,收藏4次。在进行安装的时候有一个是否联网的选择,选择链接网络,则在安装的时候,可以看到在安装过程中,它会主动下载grub-efi-amd64-signed' package,确确实实,我在安装详情里看到了它有这个的download过程以及update过程。_the grub-efiamd64-signed' package failed to install intotarget without the g

从零开始用 Python 构建一个简单的神经网络_从零开始搭建神经网络-程序员宅基地

文章浏览阅读451次。n_learn_data = int ( n_samples * 0.8 ) # 80% 的可用数据点 learn_data , test_data = samples [: n_learn_data ], samples [ - n_learn_data :] learn_labels , test_labels = labels [: n_learn_data ], labels [ - n_learn_data :]_从零开始搭建神经网络

PAT乙级-题解(Java)_找工作pat乙级-程序员宅基地

文章浏览阅读1.4k次。我的题解放在github仓库了(喜欢的话,记得star哈)下面是汇总导航,如果你只想看其中某个题的话,点击题解直达。乙级的题目每个题都是一个有趣的故事,引导你去思考解决问题的能力,不是单纯的刷题。然后只涉及数组,循环,判断,字符串等基础编程语言语法的知识,不会设计复杂的算法与数据结构。一开始可能会有点吃力,正常,但是如果你全部刷完,leetcode上部分简单题对你来说是小case了。甲级主要是算法与数据结构,乙级刷完了,也可刷甲级, 甲级的题目特别好,测试用例丰富如果是急需找工作,面试的话刷lee_找工作pat乙级

推荐文章

热门文章

相关标签