若一个线性表L采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。

输入格式:

三行数据,第一行是顺序表的元素个数,第二行是顺序表的元素,第三行是x和y。

输出格式:

删除元素值在[x,y]之间的所有元素后的顺序表。

输入样例:

10
5 1 9 10 67 12 8 33 6 2
3 10

输出样例:

1 67 12 33 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>

int main()
{
int m;
scanf("%d",&m );

int list[999];
for (int i = 0; i < m; ++i) {
scanf("%d",&list[i]);
}

int x,y;
scanf("%d%d",&x,&y);

int list2[999],q=0;

for (int j = 0; j < m; ++j) {
if (x>list[j]y<list[j])
{
list2[q]=list[j];
q++;
}
}

for (int i = 0; i < q-1; ++i) {
printf("%d ",list2[i]);
}
printf("%d",list2[q-1]);
return 0;
}

本题要求实现一个对数组进行循环左移的简单函数:一个数组_a_中存有_n_(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移_m_(≥0)个位置,即将_a_中的数据由(a​0​​a​1​​⋯an−1​​)变换为(am​​⋯an−1​​a​0​​a​1​​⋯am−1​​)(最前面的_m_个数循环移至最后面的_m_个位置)。如果还需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

输入第1行给出正整数_n_(≤100)和整数_m_(≥0);第2行给出_n_个整数,其间以空格分隔。

输出格式:

在一行中输出循环左移_m_位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:

1
2
8 3
1 2 3 4 5 6 7 8

输出样例:

1
4 5 6 7 8 1 2 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>

int main()
{
int m,n;
scanf("%d%d",&m,&n );

int list[999];
for (int i = 0; i < m; ++i) {
scanf("%d",&list[i]);
}
for (int j = 0; j < n; ++j) {
int temp = list[0];
for (int i = 1; i <m ; ++i) {
list[i-1]=list[i];
}
list[m-1]=temp;
}

for (int i = 0; i < m-1; ++i) {
printf("%d ",list[i]);
}
printf("%d",list[m-1]);
return 0;
}

1.数组定义

int a[5]

int a[5] = {1,2,3}

int a[]={1,2,3,4,5}

int a[5]={1,2,3,4,5}

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# include <stdio.h>
int main(void)
{
int a[5] = {0}; //数组清零初始化
int i;
printf("请输入5个数:");
for (i=0; i<5; ++i)
{
scanf("%d", &a[i] );
}
for (i=0; i<5; ++i)
{
printf("%d\x20", a[i]);
}
printf("\n");
return 0;
}

顺序表中增加一个数据平均n/2,删除一个平均(n-1)/2

计算方法位100+(5-1)*2

线性表的顺序存储结构和线性表的链式存储结构分别是(B )。

A.顺序存取的存储结构、顺序存取的存储结构
B.随机存取的存储结构、顺序存取的存储结构
C.随机存取的存储结构、随机存取的存储结构
D.任意存取的存储结构、任意存取的存储结构

答案解析

顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。

顺序表是线性表的( )存储表示。 (2分)

  1. 有序
  2. 连续
  3. 数组
  4. 顺序存取

若长度为n的非空线性表采用顺序存储结构,在表的第i个位置插入一个数据元素的合法值应该是( )。 (2分)

  1. 1≤i≤n
  2. 1≤i≤n+1
  3. 0≤i≤n-1
  4. 0≤i≤n

若线性表最常用的操作是存取第i个元素及其前驱的值,则采用( )存储方式节省时间。 (2分)

  1. 单链表
  2. 双向链表
  3. 单循环链表
  4. 顺序表

在这里插入图片描述

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整形、实型等数值类型,还包括字符及声音、图像、视频等非数值类型。
数据,也就是符号,必须具备两个前提:
a.可以输入到计算机中
b.能被计算机程序处理
对于整型、实型等数值类型,可以进行数值计算。
对于字符数据类型,就需要非数值的处理。而声音、图像、视频等其实是可以通过编码的手段变成字符数据来处理的

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。
比如 畜类 牛、马、羊、鸡、猪、狗等动物当然就是畜类的数据元素。

数据项:一个数据元素可以由若干个数据项组成。
比如人这样的元素,可以有眼、耳、鼻、嘴等数据项,也可以有姓名、年龄、性别等数据项。
数据项是数据不可分割的最小单位。

数据对象**:是性质相同的数据元素的集合,是数据的子集。
什么叫性质相同呢?是指数据元素具有相同数量和类型的数据项,比如人 这个例子,都有姓名、生日、性别等相同的数据项。
既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同性质,在不产生混淆的情况下,我们将数据对象简称为数据。

数据结构
结构,简单的理解就是关系,比如分子结构,就是组成分子的原子之间的排列方式。严格带你说,结构是指各个组成部分相互搭配的排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系成为 结构。
数据结构:是相互之间存在一种或者多种特定关系的数据元素的集合。

根据网上大佬的理解 可能会更直观一些:
假设有两张表,A表为人员表,B表为课程表, 表的格式如下:

重点:

这两张表就是数据
而单独的一张表就称为数据对象,即人员表是一个数据对象,课程表也是一个数据对象
而每张表中的每一行就称为数据元素
而姓名,性别,身高,课程代号,课程名就称为数据项