这个顺序表是使用数组来实现的,顺序表的插入删除遍历等操作,下面是 c 语言的完整实现代码:

#define _CRT_SECURE_NO_WARNINGS  //(放在最前面)

#include<stdio.h>
#include <string.h>
#include <stdlib.h>

struct student {
int num;
char name[20];
int age;
int score;
};

typedef struct student student_t;

//定义一个顺序表用来存放学生信息

#define STUTBL_SIZE 100

struct stu_seq {
student_t data[STUTBL_SIZE];

int len; //保存顺序表的长度
};

typedef struct stu_seq stuseq_t;

stuseq_t stu_info; // 定义顺序表,可以存放100个学生信息

//初始化一个空表
int init_seqlist(stuseq_t *pstu_seq) {
memset(pstu_seq, 0, sizeof(stuseq_t));
return 0;
}

//顺序表的插入操作,往顺序表中插入一个元素
int insert_seqlist_from_tail(stuseq_t *pstu_seq, student_t *pstu) {
int index = 0;

if ((pstu_seq == NULL) || (pstu == NULL)) {
printf("para error\n");
return -1;
}

if (pstu_seq->len >= STUTBL_SIZE) {
printf("table is full\n");

return -1;
}

index = pstu_seq->len;

memcpy(&pstu_seq->data[index], pstu, sizeof(student_t));

pstu_seq->len++;

return 0;
}

/*
* 根据学生姓名,删除顺序表中指定的学生信息,成功返回 0 ,失败返回 -1
*/

int del_seqlist_by_name(stuseq_t *pstu_seq, char *name) {
int i = 0;
int j = 0;

for (i = 0; i < pstu_seq->len; i++) {
if (strcmp(pstu_seq->data[i].name, name) == 0) {
//成功找到了要删除的学生信息的下标,就开始执行删除操作

for (j = i; j < pstu_seq->len - 1; j++) {
memcpy(&pstu_seq->data[j], &pstu_seq->data[j + 1],
sizeof(student_t));
}

pstu_seq->len--;

return 0;

}
}

printf("can not find record\n");
return -1;

}

/*
根据学生姓名,在顺序表中查找该学生的信息,通过输出参数 *pstuinfo返回
查找成功返回 0 ,找不到,或者失败返回 -1
*/
int query_seqlist_by_name(stuseq_t *pstu_seq, char *name,
student_t *pstuinfo) {
int i = 0;
int j = 0;

for (i = 0; i < pstu_seq->len; i++) {
if (strcmp(pstu_seq->data[i].name, name) == 0) {
//成功找到了学生信息,将信息返回给输出参数

memcpy(pstuinfo, &pstu_seq->data[i], sizeof(student_t));

return 0;

}
}

printf("can not find record\n");
return -1;
}


// 遍历顺序表
void show_seqlist(stuseq_t *pstu_seq) {
int i = 0;

for (i = 0; i < pstu_seq->len; i++) {
printf("%d %s %d %d\n",
pstu_seq->data[i].num,
pstu_seq->data[i].name,
pstu_seq->data[i].age,
pstu_seq->data[i].score);
}
}

int main(int argc, char *argv[]) {

student_t stu; // 定义一个学生信息结构体类变量
char stu_name[20];

memset(stu_name, 0, 20);

init_seqlist(&stu_info); //初始化顺序表

while (1) {
memset(&stu, 0, sizeof(student_t));

printf("请分别输入学生的学号, 姓名, 年龄, 成绩(学号输入0终止输入):\n");
scanf("%d %s %d %d", &stu.num, stu.name, &stu.age, &stu.score);

if (stu.num == 0) break;

insert_seqlist_from_tail(&stu_info, &stu);

}

show_seqlist(&stu_info);

printf("input delete stu name:\n");
scanf("%s", stu_name);

del_seqlist_by_name(&stu_info, stu_name);

show_seqlist(&stu_info);


printf("input query stu name:\n");
scanf("%s", stu_name);
query_seqlist_by_name(&stu_info, stu_name, &stu);

printf("%d %s %d %d\n", stu.num, stu.name, stu.age, stu.score);

return 0;
}