顺序表的实现

embedded/2024/12/21 21:08:36/

1.顺序表功能的.h文件

#define  _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int typedata;
typedef struct Seqlist{
    typedata* node;
    int size;
    int capacity;
}seqlist;
void menu();
void seqlist_init(seqlist * list);
void seqlistpush_back(seqlist* list);
void seqlistpush_front(seqlist* list);
void seqlistpop_back(seqlist* list);
void seqlistpop_front(seqlist* list);
void seqlistpush_onin(seqlist* list, int n);
void seqlistpop_onin(seqlist* list, int n);




2.顺序表包含的功能的.c文件

#include "seqlist.h"
void menu() {
    printf("******************************\n");
    printf("***1.尾插            2.头插***\n");
    printf("***3.尾删            4.头删***\n");
    printf("***5.内扩            6.内删***\n");
    printf("******************************\n");
    printf("******************************\n");

}
void seqlist_init(seqlist* list) {
    list->size = 0;
    list->capacity = 4;
    list->node = (typedata*)malloc(list->capacity * sizeof(typedata));
    memset(list->node, 0, sizeof(typedata) * list->capacity);

}
void seqlist_print(seqlist* list) {
     int i=0;
     printf("接下来将对顺序表内容进行展示\n");
     for (i = 0; i < list->size; i++) {
         printf("%d ", list->node[i]);
     }
     printf("\n");
     printf("-----------------------------\n");
}
void seqlist_full(seqlist* list) {
    if (list->capacity == list->size) {
        seqlist* tmp = (seqlist*)realloc(list->node, list->capacity * 2 * sizeof(typedata));
        if (tmp == NULL) {
            perror("扩容出错\n");
            exit(1);
        }
        list = tmp;
        list->capacity = 2 * list->capacity;
    }
}
void seqlistpush_back(seqlist* list) {
    printf("请输入你要插入的数:\n");
    typedata x = 0;
    scanf("%d", &x);
    seqlist_full(list);
    list->node[list->size] = x;
    list->size++;
    
    printf("插入成功\n");
}
void seqlistpush_front(seqlist* list) {
    printf("请输入你要插入的数:\n");
    typedata x = 0;
    scanf("%d", &x);
    seqlist_full(list);
    int i = 0;
    for (i = list->size; i > 0; i--) {
        list->node[i] = list->node[i - 1];
    }
    list->node[0] = x;
    list->size++;
    printf("插入成功\n");
}
void seqlistpop_back(seqlist* list) {
    if (list->size > 0) {
        list->node[list->size - 1] = 0;
        list->size--;
        printf("尾删完成\n");
    }
    else {
        printf("内部暂时还没有内容\n");
    }
    
}
void seqlistpop_front(seqlist* list) {
    int i = 0;
    for (i = 0; i < list->size; i++) {
        list->node[i-1] = list->node[i];
    }
    list->node[list->size - 1] = 0;
    list->size--;
    printf("头删成功\n");
}
int  len_cmp(seqlist* list,int n) {
    if (list->size >= n && n>0) {
        return 1;
    }
    return 0;
}
void seqlistpush_onin(seqlist* list,int n) {//n为要增加的位置;
    seqlist_full(list);
    printf("请输入你要插入的数\n");
    typedata x = 0;
    scanf("%d", &x);
    if (len_cmp(list,n) == 1) {
        printf("正在进行插入\n");
        int i = 0;
        for (i = list->size; i>n-1; i--) {
            list->node[i] = list->node[i - 1];
        }
        list->node[n- 1] = x;
        list->size++;
        printf("插入完毕\n");
    }
    else {
        printf("你要插入的位置存在问题\n");
    }
}
void seqlistpop_onin(seqlist* list, int n) {//n为要增加的位置;
    if (len_cmp(list, n) == 1) {
        printf("正在进行内部删除\n");
        int i = 0;
        for (i = n; i <list->size; i++) {
            list->node[i-1] = list->node[i];
        }
        list->node[list->size-1] =0;
        list->size--;
        printf("删除完毕\n");
    }
    else {
        printf("你要删除的位置存在问题\n");
    }
}




3.顺序表实现的主函数

#include "seqlist.h"
int main() {
    int input = 0;
    int n = 0;//内部删除或增加的位置
    seqlist list1;
    seqlist_init(&list1);
    do {
        menu();
        printf("请你选择您要进行的操作\n");
        scanf("%d", &input);
        switch (input) {
        case 1:
            printf("正要进行尾插\n");
            seqlistpush_back(&list1);
            seqlist_print(&list1);
            break;
        case 2:
            printf("正要进行头插\n");
            seqlistpush_front(&list1);
            seqlist_print(&list1);
            break;
        case 3:
            printf("正在进行尾删\n");
            seqlistpop_back(&list1);
            seqlist_print(&list1);
            break;
        case 4:
            printf("正在进行头删\n");
            seqlistpop_front(&list1);
            seqlist_print(&list1);
            break;
        case 5:
            printf("正在进行内部插入\n");
        
            printf("请输入你要插入的位置\n");
            scanf("%d", &n);
            seqlistpush_onin(&list1,n);
            seqlist_print(&list1);
            break;
        case 6:
            printf("正在进行内部删除\n");
            printf("请输入你要删除的位置\n");
            scanf("%d", &n);
            seqlistpop_onin(&list1, n);
            seqlist_print(&list1);
            break;
        case 0:
            printf("正在退出程序\n");
            break;
        default:
            printf("您的输入有误,请重新输入\n");
        }
    } while (input);
    free(list1.node);
    return 0;
}




4.代码的效果展示

最后这里跳出程序是一开始在主函数文件设break了(已解决)


http://www.ppmy.cn/embedded/121087.html

相关文章

【C++掌中宝】从std的角度来进一步了解命名空间

文章目录 前言1. 什么是命名空间&#xff08;namespace&#xff09;&#xff1f;2. \<iostream\>和\<iostream.h\>的区别3. C命名空间的三种使用方式3.1 直接指定标识符3.2 使用 using 关键字3.3 使用 using namespace std 4. 为什么避免使用 using namespace std5…

尾矿库安全监测系统:守护矿山安全的关键技术

尾矿库是矿山企业用于存放尾矿的重要设施&#xff0c;其安全状况直接关系到周边环境和人民生命财产安全。近年来&#xff0c;随着技术的不断进步&#xff0c;尾矿库安全监测系统应运而生&#xff0c;为尾矿库的安全管理提供了强有力的技术支持。本文将详细介绍尾矿库安全监测系…

每日一题|983. 最低票价|动态规划、记忆化递归

本题求解最小值&#xff0c;思路是动态规划&#xff0c;但是遇到的问题是&#xff1a;动态规划更新的顺序和步长&#xff0c;以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天&#xff08;可能不在需要出行的天数里&#xff09;&#xff0c;需要花费…

用户体验分享 | YashanDB V23.2.3安装部署

近期崖山新版体验过程中&#xff0c;总能看到用户提问&#xff1a;openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验&#xff0c;希望能够帮助到大家~ 1.Lucifer三思而后行 &#xff1a;YashanDB 个人版数据库安装部…

滚雪球学MySQL[3.2讲]:MySQL聚合函数与分组详解:COUNT、SUM、AVG、MAX、MIN及GROUP BY与HAVING

全文目录&#xff1a; 前言3.2 聚合函数与分组1. COUNT、SUM、AVG、MAX、MIN等常用聚合函数1.1 COUNT函数基本语法示例1&#xff1a;统计学生表中的总记录数示例2&#xff1a;统计特定条件下的记录数 1.2 SUM函数基本语法示例1&#xff1a;计算总成绩 1.3 AVG函数基本语法示例1…

C++入门(有C语言基础)

string类 string类初始化的方式大概有以下几种&#xff1a; string str1;string str2 "hello str2";string str3("hello str3");string str4(5, B);string str5[3] {"Xiaomi", "BYD", "XPeng"};string str6 str5[2];str…

Elasticsearch 使用误区之六——富文本内容写入前不清洗

0、引言 在很多应用场景中&#xff0c;我们会将富文本内容&#xff08;如 HTML 格式的网页内容&#xff09;存储到 Elasticsearch 中&#xff0c;以实现全文检索。 然而&#xff0c;在实际使用过程中&#xff0c;我们可能会遇到一些问题&#xff0c;比如在检索时&#xff0c;HT…

联想天逸100使用笔记

文章目录 配置整理过程锁定功能键怎么弄? 翻出好多年不用的老电脑&#xff0c;饱受折磨&#xff0c;做个笔记。 之前不是我在使用&#xff0c;本身配置就不高&#xff0c;还被装了各种流氓软件&#xff0c;卡的几乎动不了。 配置 老电脑配置不行&#xff1a; i3 5005U 4G内存…