线性表基本操作的源代码。要求用结构体不用指针
时间: 2023-05-25 14:03:53 浏览: 83
以下是使用结构体实现线性表基本操作的源代码,其中线性表元素类型为int。注意,这里使用了动态数组来存储线性表元素。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1000
typedef struct {
int data[MAX_SIZE]; // 存储线性表元素的数组
int length; // 线性表长度
} List;
// 初始化线性表
void init(List *list) {
list->length = 0; // 初始化长度为0
}
// 获取线性表长度
int getLength(List *list) {
return list->length;
}
// 判断线性表是否为空
int isEmpty(List *list) {
return (list->length == 0);
}
// 判断线性表是否已满
int isFull(List *list) {
return (list->length == MAX_SIZE);
}
// 获取线性表中第i个位置的元素
int get(List *list, int i) {
if (i < 1 || i > list->length) {
printf("Index out of range.\n");
exit(1);
}
return list->data[i - 1];
}
// 在线性表中插入元素
void insert(List *list, int i, int element) {
if (isFull(list)) {
printf("List is full.\n");
exit(1);
}
if (i < 1 || i > list->length + 1) {
printf("Index out of range.\n");
exit(1);
}
// 将第i个位置及其后面的元素后移一位
for (int j = list->length; j >= i; j--) {
list->data[j] = list->data[j - 1];
}
list->data[i - 1] = element; // 在第i个位置插入元素
list->length++; // 更新线性表长度
}
// 在线性表末尾添加元素
void append(List *list, int element) {
insert(list, list->length + 1, element); // 调用insert函数,在最后一个位置插入元素
}
// 删除线性表中第i个位置的元素
void delete (List *list, int i) {
if (isEmpty(list)) {
printf("List is empty.\n");
exit(1);
}
if (i < 1 || i > list->length) {
printf("Index out of range.\n");
exit(1);
}
// 将第i个位置及其后面的元素前移一位
for (int j = i; j < list->length; j++) {
list->data[j - 1] = list->data[j];
}
list->length--; // 更新线性表长度
}
// 清空线性表
void clear(List *list) {
list->length = 0; // 将线性表长度清零
}
// 打印线性表中所有元素
void print(List *list) {
if (isEmpty(list)) {
printf("List is empty.\n");
return;
}
for (int i = 0; i < list->length; i++) {
printf("%d ", list->data[i]);
}
printf("\n");
}
int main() {
List list;
init(&list);
append(&list, 1);
append(&list, 2);
append(&list, 3);
insert(&list, 2, 4);
delete (&list, 3);
print(&list);
clear(&list);
print(&list);
return 0;
}
```
阅读全文