C语言 数据结构之数组模拟实现顺序表流程详解
什么是顺序表?
顺序表是一种基于连续存储结构的数据结构,它可以用一段连续的存储单元来存储线性表中的所有元素。
顺序表的实现思路
顺序表的实现主要依赖数组。我们可以定义一个数组来存储线性表的数据元素,同时再定义一个变量来保存线性表当前的长度。当需要对线性表进行插入、删除、查找等操作时,根据需求,可以通过数组的下标来进行对应元素的操作。
顺序表的实现代码
下面是一个简单的 C 语言代码,实现了一个顺序表的基本操作:创建、插入、删除、查找等。
#define MAXSIZE 100 // 定义顺序表数组的最大长度
typedef struct {
int data[MAXSIZE]; // 存储顺序表数据元素的数组
int length; // 记录顺序表的当前长度
} SqList;
// 初始化一个空的顺序表
SqList InitList() {
SqList list;
list.length = 0;
return list;
}
// 在顺序表的指定位置插入一个元素
int ListInsert(SqList *list, int index, int value) {
// 判断插入位置是否非法
if (index < 1 || index > list->length + 1) {
return 0;
}
// 判断顺序表是否已满
if (list->length >= MAXSIZE) {
return 0;
}
// 将插入位置后的元素依次后移
for (int i = list->length; i >= index; i--) {
list->data[i] = list->data[i - 1];
}
// 在插入位置上插入新元素
list->data[index - 1] = value;
// 更新顺序表的长度
list->length++;
return 1;
}
// 从顺序表中删除指定位置的元素
int ListDelete(SqList *list, int index) {
// 判断删除位置是否非法
if (index < 1 || index > list->length) {
return 0;
}
// 将删除位置后的元素依次前移
for (int i = index; i < list->length; i++) {
list->data[i - 1] = list->data[i];
}
// 更新顺序表的长度
list->length--;
return 1;
}
// 返回顺序表中指定元素的位置
int LocateElem(SqList *list, int value) {
for (int i = 0; i < list->length; i++) {
if (list->data[i] == value) {
return i + 1;
}
}
return 0;
}
顺序表的应用举例
示例一:输入员工信息,输出第一个工资高于平均水平的员工姓名
#include <stdio.h>
int main() {
int n; // 员工人数
float sum = 0, avg; // 工资总和、平均工资
char name[20], max_name[20] = ""; // 员工姓名、工资最高者姓名
int salary, max_salary = 0; // 员工工资、工资最高者工资
SqList list = InitList(); // 创建一个空的顺序表
// 输入员工信息并将其存入顺序表中
printf("请输入员工的个数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第 %d 个员工的姓名和工资:", i);
scanf("%s %d", name, &salary);
ListInsert(&list, i, salary);
sum += salary;
}
// 计算平均工资
avg = sum / n;
// 找到工资最高者的工资和姓名
for (int i = 1; i <= n; i++) {
if (list.data[i - 1] > max_salary) {
max_salary = list.data[i - 1];
strcpy(max_name, name);
}
}
// 输出第一个工资高于平均水平的员工姓名
for (int i = 1; i <= n; i++) {
if (list.data[i - 1] > avg) {
printf("%s", name);
break;
}
}
return 0;
}
示例二:用顺序表实现栈
#include <stdio.h>
#define MAXSIZE 100 // 定义栈的最大长度
typedef struct {
int data[MAXSIZE]; // 存储栈元素的数组
int top; // 栈顶指针
} Stack;
// 初始化一个空栈
Stack InitStack() {
Stack s;
s.top = -1; // 表示栈空
return s;
}
// 判断栈是否为空
int IsEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int IsFull(Stack *s) {
return s->top == MAXSIZE - 1;
}
// 入栈
int Push(Stack *s, int value) {
if (IsFull(s)) {
return 0;
}
s->top++;
s->data[s->top] = value;
return 1;
}
// 出栈
int Pop(Stack *s, int *value) {
if (IsEmpty(s)) {
return 0;
}
*value = s->data[s->top];
s->top--;
return 1;
}
// 获取栈顶元素的值
int Top(Stack *s, int *value) {
if (IsEmpty(s)) {
return 0;
}
*value = s->data[s->top];
return 1;
}
int main() {
Stack s = InitStack(); // 创建一个空栈
// 入栈
Push(&s, 1);
Push(&s, 2);
Push(&s, 3);
// 出栈
int value;
Pop(&s, &value);
Pop(&s, &value);
// 获取栈顶元素的值
Top(&s, &value);
printf("栈顶元素的值为:%d\n", value);
return 0;
}
以上就是关于 C 语言 数组模拟实现顺序表的详细攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 数据结构之数组模拟实现顺序表流程详解 - Python技术站