C语言顺序表(指针*)

IDE:Visual Studio 2022

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <stdlib.h>  

#define MAXSIZE 100 // 顺序表的最大长度,这个按需要可以自己修改
// 顺序表结构体定义  
typedef struct {
    int data[MAXSIZE]; // 存储元素的数组  
    int length;        // 当前顺序表的长度  
} SqList;
// 初始化顺序表  
void InitList(SqList* L) {
    L->length = 0;
}

 ListInsert() 函数要在 CreateList() 函数上面

// 向顺序表中插入元素  
int ListInsert(SqList* L, int i, int e) {
    if (i < 1 || i > L->length + 1 || L->length == MAXSIZE) {
        return 0; // 插入失败  
    }
    for (int j = L->length; j >= i; j--) {
        L->data[j] = L->data[j - 1];
    }
    L->data[i - 1] = e;
    L->length++;
    return 1; // 插入成功  
}

ListInsert() 函数和 CreateList() 函数上下顺序不能颠倒,因为 CreateList() 调用了 ListInsert()

// 创建顺序表  
void CreateList(SqList* L, int n) {
    InitList(L);
    for (int i = 1; i <= n; i++) {
        int e;
        printf("请输入第%d个元素: ", i);
        scanf("%d", &e);
        ListInsert(L, i, e);
    }
}

 以下代码是一些关于顺序表的算法

// 直接插入排序  
void InsertSort(SqList* L) {
    int i, j, e;
    for (i = 2; i <= L->length; i++) {
        e = L->data[i - 1];
        for (j = i - 1; j > 0 && L->data[j - 1] > e; j--) {
            L->data[j] = L->data[j - 1];
        }
        L->data[j] = e;
    }
}
// 冒泡排序  
void BubbleSort(SqList* L) {
    int i, j, temp;
    for (i = 0; i < L->length - 1; i++) {
        for (j = 0; j < L->length - i - 1; j++) {
            if (L->data[j] > L->data[j + 1]) {
                temp = L->data[j];
                L->data[j] = L->data[j + 1];
                L->data[j + 1] = temp;
            }
        }
    }
}
// 快速排序  
void QuickSort(SqList* L, int left, int right) {
    if (left >= right) return;
    int pivot = L->data[left], i = left, j = right;
    while (i < j) {
        while (i < j && L->data[j] >= pivot) j--;
        L->data[i] = L->data[j];
        while (i < j && L->data[i] <= pivot) i++;
        L->data[j] = L->data[i];
    }
    L->data[i] = pivot;
    QuickSort(L, left, i - 1);// 对左子数组进行排序
    QuickSort(L, i + 1, right);// 对右子数组进行排序
}

到这里算法函数截止 

// 打印顺序表  
void PrintList(SqList L) {
    for (int i = 0; i < L.length; i++) {
        printf("%d ", L.data[i]);
    }
    printf("\n");
}

主函数 

int main() {
    SqList L;
    int n;

    // 输入顺序表的长度  
    printf("请输入顺序表的长度: ");
    scanf("%d", &n);

    // 创建顺序表  
    CreateList(&L, n);

    // 打印原始顺序表  
    printf("原始顺序表: ");
    PrintList(L);

    // 直接插入排序  
    InsertSort(&L);
    printf("直接插入排序后: ");
    PrintList(L);

    // 冒泡排序(调用该函数前重置顺序表为原始状态)  
    CreateList(&L, n);
    BubbleSort(&L);
    printf("冒泡排序后: ");
    PrintList(L);

    // 快速排序(调用该函数前重置顺序表为原始状态)
    CreateList(&L, n);
    QuickSort(&L, 0, L.length - 1);
    printf("快速排序后: ");
    PrintList(L);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值