数据结构 顺序表

基于顺序表的简单数据结构实现

在这篇文章中,我们将探讨一个简单的顺序表(Sequence List)实现,包括顺序表的初始化、插入、删除和打印等基本操作。顺序表是一种用数组实现的线性数据结构,具有随机访问的优点,适合于存储和管理有限数量的数据。

1. 头文件定义

首先,我们定义了一个头文件,包含顺序表的结构体和相关函数的声明。

#pragma once
#define MAX 100
#include<stdio.h>
#include<stdlib.h>

typedef struct {
    int data[MAX];
    int length;
} seqlist;

void ini_seqlist(seqlist* list);
int insert_seqlist(seqlist* list, int index, int value);
int delete_seqlist(seqlist* list, int index);
void printSeqList(seqlist* list);

结构体定义

我们定义了一个 `seqlist` 结构体,包含两个成员:
- `data[MAX]`: 用于存储元素的数组,最大容量为 100。
- `length`: 当前顺序表中元素的数量。

2. 源文件实现

在源文件中,我们实现了顺序表的各种操作。

2.1 初始化顺序表

void ini_seqlist(seqlist* list) {
    list->length = 0;
}

`ini_seqlist` 函数用于初始化顺序表,将其长度设置为 0。

2.2 插入元素
 

int insert_seqlist(seqlist* list, int index, int value) {
    if (list->length >= MAX) {
        printf("list is full\n");
        return -1;
    }
    if (index < 0 || index > list->length) {
        printf("index is invalid\n");
        return -1;
    }
    for (int i = list->length; i > index; i--) {
        list->data[i] = list->data[i - 1];
    }
    list->data[index] = value;
    list->length++;
    return 0;
}

`insert_seqlist` 函数用于在指定位置插入一个新元素。首先检查顺序表是否已满,然后检查插入位置是否有效。接下来,将插入位置之后的元素向后移动一位,并将新元素放入指定位置。

2.3 删除元素
 

int delete_seqlist(seqlist* list, int index) {
    if (list->length <= 0) {
        printf("list is empty\n");
        return -1;
    }
    if (index < 0 || index >= list->length) {
        printf("index is invalid\n");
        return -1;
    }
    for (int i = index; i < list->length - 1; i++) {
        list->data[i] = list->data[i + 1];
    }
    list->length--;
    return 0;
}

`delete_seqlist` 函数用于删除指定位置的元素。首先检查顺序表是否为空,然后检查删除位置是否有效。接下来,将删除位置之后的元素向前移动一位,并减少顺序表的长度。

2.4 打印顺序表

void printSeqList(seqlist* list) {
    printf("Sequence List: ");
    for (int i = 0; i < list->length; i++) {
        printf("%d\n", list->data[i]);
    }
    printf("length: %d\n", list->length);
    printf("打印完毕\n");
}

`printSeqList` 函数用于打印顺序表中的所有元素及其当前长度。

3. 使用示例

在主函数中,我们可以测试顺序表的各项功能。

#include"Lk.h"
int main() {
	/*typedef struct {
		int data[MAX];
		int length;
	}seqlist;*/
	/*void ini_seqlist(seqlist * list);
	int insert_seqlist(seqlist * list, int index, int value);
	int delete_seqlist(seqlist * list, int index);
	void printSeqList(seqlist * list);*/
	seqlist* list = (seqlist*)malloc(sizeof(seqlist));
	ini_seqlist(list);
	for (int i = 0; i < 50; i++)
	{
		list->data[i] = i;
		list->length++;
	}
	insert_seqlist(list, 9, 666);
	printSeqList(list);
    free(list);
    list=NULL;
	return 0;
}

在主函数中,我们首先初始化顺序表,然后插入几个元素,打印顺序表,删除一个元素,并再次打印顺序表。

顺序表的优点在于能够快速随机访问元素,但在插入和删除操作时需要移动元素,可能导致性能下降。尽管如此,顺序表在许多简单的应用场景中仍然非常有效。希望通过这篇文章,读者能对顺序表有更深入的理解,并能够在实际编程中应用这一数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值