顺序表的查找,初始化一个顺序表,将1,2,3,4,5存入顺序表中,在调用函数查找3并返回索引。
时间: 2024-12-20 16:30:02 浏览: 6
顺序表是一种线性数据结构,它按照元素在内存中的存储顺序进行访问。当我们需要在顺序表中查找特定元素时,通常采用线性搜索的方式,即从第一个元素开始逐个比较,直到找到目标值或遍历完整个列表。
以下是步骤:
1. 初始化顺序表:首先我们需要创建一个顺序表的数据结构,比如数组或链表,用于存储整数。在这个例子中,我们可以创建一个大小固定的数组,如`int[] list = new int[5];`。
2. 插入元素:然后我们将元素1、2、3、4、5依次插入到数组中对应的位置。例如,如果数组下标从0开始:
- `list[0] = 1;`
- `list[1] = 2;`
- `list[2] = 3;`
- `list[3] = 4;`
- `list[4] = 5;`
3. 查找元素:为了找到数字3的索引,我们编写一个查找函数,如下面的伪代码所示:
```java
int findIndex(int target) {
for (int i = 0; i < list.length; i++) {
if (list[i] == target) {
return i;
}
}
// 如果找不到目标元素,返回 -1 或者抛出异常
return -1;
}
```
4. 调用函数:调用`findIndex(3)`会返回数字3在顺序表中的索引位置,如果是第一次出现,结果应该是2。
相关问题
(一)用顺序表实现 用数据结构C语言1.顺序表数据类型定义 2.顺序表的初始化 3.顺序表的创建 4.输出顺序表的各个元素 5.两个一元多项式相加算法 6.在main函数中调用以上函数
在C语言中,使用顺序表(也称为数组)实现数据结构通常涉及以下几个步骤:
**1. 数据类型定义:**
```c
typedef struct {
int degree; // 系数项数
double coefficient[10]; // 存储系数
} Polynomial;
```
这里我们定义了一个名为Polynomial的结构体,包含一元多项式的度数(degree)和最多10个系数的数组。
**2. 初始化:**
```c
void init(Polynomial* poly, int deg) {
poly->degree = deg;
for (int i = 0; i < deg; ++i)
poly->coefficient[i] = 0.0;
}
```
这个函数用于初始化一个新的顺序表,设置初始长度和所有系数为0。
**3. 创建:**
```c
Polynomial createPolynomial() {
Polynomial poly;
init(&poly, 0); // 初始为空多项式
return poly;
}
```
创建函数返回一个已初始化的空一元多项式。
**4. 输出元素:**
```c
void printPolynomial(const Polynomial* poly) {
printf("Degree: %d\n", poly->degree);
for (int i = 0; i <= poly->degree; ++i) {
if (poly->coefficient[i] != 0.0)
printf("Coefficient of x^%d: %.2lf\n", i, poly->coefficient[i]);
}
}
```
这个函数打印多项式的各项及其系数。
**5. 相加算法:**
```c
void addPolynomials(Polynomial* result, const Polynomial& poly1, const Polynomial& poly2) {
if (poly1.degree >= poly2.degree) {
Polynomial temp = poly1;
poly1 = poly2;
poly2 = temp;
}
for (int i = 0; i <= poly1.degree; ++i) {
result->coefficient[i] += poly1.coefficient[i] + poly2.coefficient[i];
}
}
```
该函数将两个多项式相加,并将结果存入`result`中。
**6. 主函数调用示例:**
```c
int main() {
Polynomial poly1 = createPolynomial();
Polynomial poly2 = createPolynomial();
// ...(填充多项式的系数)
Polynomial sum;
addPolynomials(&sum, poly1, poly2);
printPolynomial(&sum);
return 0;
}
```
在主函数中,首先创建两个多项式,然后调用添加和打印函数。
基础项目: 编写主函数,通过菜单控制及调用相应的子函数完成以下功能: (1)初始化顺序表L(学生信息从文件读入)。 (2)输出顺序表L(要求一名学生的信息占一行)。 (3)输出顺序表L的长度。 (4)输出顺序表L的第i个学生的信息,i的值可从键盘输入。 (5)输出学生x的位置,x的关键字值(学号或姓名)可从键盘输入。 (6)在第i个元素位置上插入学生x的信息,i和x的信息可从键盘输入。 (7)删除L的第i个元素,i的值可从键盘输入。 (8)删除L中学生x的信息,x的关键字值(学号或姓名)可从键盘输入。 3.拓展项目: <1>将顺序表的元素按“班级”信息分别存储到一个顺序表中。 <2>将顺序表的元素按“班级”信息有序输出,同一班级的按姓名有序输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20 // 学号、姓名、班级的最大长度
#define MAX_STU 100 // 最多存储的学生数目
typedef struct {
char id[MAX_LEN]; // 学号
char name[MAX_LEN]; // 姓名
char grade[MAX_LEN]; // 年级
char major[MAX_LEN]; // 专业
char classno[MAX_LEN]; // 班级
} Student;
typedef struct {
Student data[MAX_STU]; // 存放学生信息的数组
int length; // 学生信息的数目
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->length = 0;
}
// 从文件中读入学生信息,存入顺序表
void ReadFromFile(SeqList *L, char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Cannot open file %s\n", filename);
exit(1);
}
while (fscanf(fp, "%s %s %s %s %s", L->data[L->length].id, L->data[L->length].name, L->data[L->length].grade, L->data[L->length].major, L->data[L->length].classno) != EOF) {
L->length++;
}
fclose(fp);
}
// 输出顺序表中的所有学生信息
void PrintList(SeqList *L) {
int i;
for (i = 0; i < L->length; i++) {
printf("%s %s %s %s %s\n", L->data[i].id, L->data[i].name, L->data[i].grade, L->data[i].major, L->data[i].classno);
}
}
// 输出顺序表的长度
void PrintLength(SeqList *L) {
printf("The length of the list is %d\n", L->length);
}
// 输出顺序表中第i个学生的信息
void PrintStudent(SeqList *L, int i) {
if (i < 1 || i > L->length) {
printf("Invalid index\n");
return;
}
printf("%s %s %s %s %s\n", L->data[i - 1].id, L->data[i - 1].name, L->data[i - 1].grade, L->data[i - 1].major, L->data[i - 1].classno);
}
// 输出学生x的位置
void PrintPosition(SeqList *L, char *x) {
int i;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].id, x) == 0 || strcmp(L->data[i].name, x) == 0) {
printf("%d\n", i + 1);
return;
}
}
printf("Not found\n");
}
// 在第i个元素位置上插入学生x的信息
void InsertStudent(SeqList *L, int i, Student x) {
int j;
if (i < 1 || i > L->length + 1) {
printf("Invalid index\n");
return;
}
if (L->length >= MAX_STU) {
printf("List is full\n");
return;
}
for (j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = x;
L->length++;
}
// 删除L的第i个元素
void DeleteStudent(SeqList *L, int i) {
int j;
if (i < 1 || i > L->length) {
printf("Invalid index\n");
return;
}
for (j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
}
// 删除L中学生x的信息
void DeleteStudentByKey(SeqList *L, char *key) {
int i, j;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].id, key) == 0 || strcmp(L->data[i].name, key) == 0) {
for (j = i + 1; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
return;
}
}
printf("Not found\n");
}
int main() {
SeqList L;
int choice, i;
char filename[MAX_LEN], x[MAX_LEN];
Student new_stu;
InitList(&L);
printf("Input the filename to load data: ");
scanf("%s", filename);
ReadFromFile(&L, filename);
while (1) {
printf("1. Print List\n");
printf("2. Print Length\n");
printf("3. Print Student\n");
printf("4. Print Position\n");
printf("5. Insert Student\n");
printf("6. Delete Student\n");
printf("7. Delete Student by Key\n");
printf("0. Exit\n");
printf("Input your choice: ");
scanf("%d", &choice);
switch (choice) {
case 0:
return 0;
case 1:
PrintList(&L);
break;
case 2:
PrintLength(&L);
break;
case 3:
printf("Input the index of the student: ");
scanf("%d", &i);
PrintStudent(&L, i);
break;
case 4:
printf("Input the key of the student: ");
scanf("%s", x);
PrintPosition(&L, x);
break;
case 5:
printf("Input the index to insert: ");
scanf("%d", &i);
printf("Input the student's id, name, grade, major, classno: ");
scanf("%s %s %s %s %s", new_stu.id, new_stu.name, new_stu.grade, new_stu.major, new_stu.classno);
InsertStudent(&L, i, new_stu);
break;
case 6:
printf("Input the index to delete: ");
scanf("%d", &i);
DeleteStudent(&L, i);
break;
case 7:
printf("Input the key of the student: ");
scanf("%s", x);
DeleteStudentByKey(&L, x);
break;
default:
printf("Invalid choice\n");
break;
}
}
return 0;
}
阅读全文