数据机构-2(顺序表)

news/2024/4/27 15:52:06

线性表

概念

顺序表

示例:创建一个存储学生信息的顺序表

表头(Tlen总长度, Clen当前长度)

函数

#include <seqlist.c>

#include <stdio.h>
#include <stdlib.h>
#include "seqlist.h"
#include <string.h>
SeqList *CreateSeqList(int len)
{SeqList *s1 = (SeqList *)malloc(sizeof(SeqList));if(NULL == s1){perror("Create SeqList malloc fail");return NULL;}s1->head = (DATATYPE *)malloc(sizeof(DATATYPE)*len);if(NULL == s1->head){perror("create sqlist head malloc");return NULL;}s1->tlen = len;s1->clen = 0;return s1;
}int IsFullSeqList(SeqList *list)
{return list->clen == list->tlen;
}int InsertTailSeqList(SeqList *list, DATATYPE *data)
{if(IsFullSeqList(list)){return -1;}memcpy(&list->head[list->clen], data, sizeof(DATATYPE));++list->clen;return 0;
}
int get_size_seqlist(SeqList *list)
{return list->clen;
}
int ShowSeqList(SeqList *list)
{int len = get_size_seqlist(list);int i = 0 ;for(i = 0; i < len; ++i){printf("%s %c %d %d\n", list->head[i].name, list->head[i].sex, list->head[i].age, list->head[i].score);}return 0;
}int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)
{if(IsFullSeqList(list) || pos > list->clen){perror("insert fail");return -1;}int i = 0;for(i = list->clen; pos<i; --i){list ->head[i] = list->head[i-1];}memcpy(&list->head[pos], data, sizeof(DATATYPE));list->clen++;return 0;
}int FindSeqList(SeqList *list, char *name)
{int len = get_size_seqlist(list);\int i = 0;for(i = 0; i < len; ++i){if(0 == strcmp(list->head[i].name, name)){return i;}}return -1;
}DATATYPE* get_item_seqlist(SeqList *list, int pos)
{if(pos < 0 || pos >= list->clen){return NULL;}return &list->head[pos];
}int ModifySeqList(SeqList *list, char *name, DATATYPE *newdata)
{int ret = FindSeqList(list, name);if(-1 == ret){return -1;}memcpy(&list->head[ret], newdata, sizeof(DATATYPE));return 0;
}
int ClearSeqList(SeqList *list)
{list->clen = 0;return 0;
}int DestroySeqList(SeqList *list)
{free(list->head);free(list);return 0;
}int DeleteSeqList(SeqList *list, char *name)
{int ret = FindSeqList(list, name);if(ret < 0){printf("not find");return -1;}int i = ret;for(; i < list->clen; i++){memcpy(&list->head[i+1], &list->head[i], sizeof(list->head[0]));}list->clen--;
}

#include “seqlist.h”

#ifndef _SEQLIST_H
#define _SEQLIST_Htypedef struct person{char name[32];char sex;int age;int score;
}DATATYPE;typedef struct list{DATATYPE *head;int tlen;int clen;
}SeqList;SeqList *CreateSeqList(int len);
int DestroySeqList(SeqList *list);//free
int ShowSeqList(SeqList *list);//show
int InsertTailSeqList(SeqList *list, DATATYPE *data);//写
int IsFullSeqList(SeqList *list);//clen ?= tlen
int IsEmptySeqList(SeqList *list);
int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos);//插入
int FindSeqList(SeqList *list, char *name);//find
int ModifySeqList(SeqList *list, char *old, DATATYPE *new);//修改
int DeleteSeqList(SeqList *list, char *name);//删除某
int ClearSeqList(SeqList *list);//clear all
int get_size_seqlist(SeqList *list);//clen = ?
DATATYPE *get_item_seqlist(SeqList *list, int pos);//get head[?]#endif

主函数


#include <stdio.h>
#include "seqlist.h"int main()
{DATATYPE data[] = {{"jack", 'm', 20, 90},{"tom", 'm', 21, 78},{"tony", 'f', 19, 42},{"sora", 'f', 23, 74},{"amy", 'f', 21, 69}};SeqList *s1 = CreateSeqList(10);InsertTailSeqList(s1, &data[0]);InsertTailSeqList(s1, &data[1]);InsertTailSeqList(s1, &data[2]);ShowSeqList(s1);printf("----------------------------------------\n");InsertPosSeqList(s1, &data[4], 2);ShowSeqList(s1);printf("----------------------------------------\n");int ret = FindSeqList(s1, "tony");if(-1 == ret){printf("not find\n");}else{DATATYPE *tmp = get_item_seqlist(s1, ret);printf("%s  %d\n", tmp->name, tmp->score);}printf("----------------------------------------\n");ModifySeqList(s1, "lisi", &data[4]);ShowSeqList(s1);printf("----------------------------------------\n");DeleteSeqList(s1, "tony");ShowSeqList(s1);ClearSeqList(s1);DestroySeqList(s1);return 0;
}

内存泄漏检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

WPF连接MySqldemo

界面总要管理数据嘛,于是便学习了一下WPF与MySql的基本连接. 运行结果: 环境配置 需要下载安装Mysql,网上教程很多,不详说,创建的工程需要下载或者引入相关的包(MySql.Data) 连接的部分直接看具体的代码即可 xaml代码(只放置了一个按钮和文本框) <Grid><Button x:Name…

小程序云开发实战:通用企业产品信息展示小程序

之前做小程序都是自己搭建数据管理后台&#xff0c;比如我之前做的小程序&#xff1a;一搜就学&#xff0c;就是使用java来做管理后台&#xff0c;小程序做前端展示。但是对于简单的小程序来说&#xff0c;做一套管理后台有点拿大炮打蚊子&#xff0c;所以使用云开发就是不错的…

爬虫逆向实战(37)-某保险超市(AES,SHA256)

一、数据接口分析 主页地址&#xff1a;某保险超市 1、抓包 通过抓包可以发现数据接口是/tacpc/tiananapp/marketing_product_commodity/commodityList 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现&#xff0c;有一个jsonKey加密参…

电机与直线模组选型

一。普通电机选型 普通电机选型&#xff08;一&#xff09; 三相异步电机 定子&#xff1a;产生旋转磁场 转子&#xff1a;切割磁场&#xff0c;产生洛伦兹力 结构简单&#xff0c;成本低&#xff0c;稳定 效率较低&#xff0c;转速不稳定 N60f/P 定子旋转速度&#xff1a;150…

JavaScript | 检测文档在垂直方向已滚动的像素值用pageYOffset在webstorm上显示弃用了,是否应该继续使用?还是用其他替代?

在学习JavaScript的时候&#xff0c;深入学习时会遇到一些实际案例需要检测文档在垂直方向已滚动的像素值。 例如&#xff0c;当前页面内容很多&#xff0c;我想要滚动鼠标滑轮或者拖拽滚动条来浏览网页下面的内容。这时候一动滚动条&#xff0c;一些绝对固定的盒子却想要随着…

基于spring boot的体育场馆设施预约系统

摘 要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;体育场馆设施预约系统当然不能排除在外。体育场馆设施预约系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及Sprin…