--顺序表
-顺序表的概念
顺序表实际上就是数组,数组在进行封装后,可以进行增删改查操作,就成了顺序表
-顺序表相关函数
malloc函数
框架:int* p=(int*)malloc(sizeof(int));
功能:开辟动态空间
memset函数
框架:memset(p,0,sizeof(p));
功能:对开辟的空间进行初始化
-顺序表代码实现
sep_list.c
#include "seq_list.h"
// 创建空的顺序表
seqlist_t* create_empty_seqlist(){
// 使用malloc创建空间
seqlist_t* p =(seqlist_t*)malloc(sizeof(seqlist_t));
if(p==NULL){
printf("malloc allot failure:%s",strerror(errno));
exit(EXIT_FAILURE);
}
memset(p,0,sizeof(seqlist_t));
return p;
}
// 判断顺序表是否已满
bool seqlist_is_full(seqlist_t* p){
if(p->n==MAX){
return true;
}
return false;
}
bool seqlist_is_empty(seqlist_t* p){
if(p->n==0){
return true;
}
return false;
}
// 添加数据
bool seqlist_insert_data(seqlist_t* p,datatype_t* p_data){
if(seqlist_is_full(p)){
return false;
}
p->buffer[p->n]=*p_data;
p->n++;
return true;
}
// 显示数据
void seqlist_display(seqlist_t* p){
for(int i=0;i<p->n;i++){
datatype_t data = p->buffer[i];
printf("%s\t%s\t%hhd\n",data.name,data.id,data.age);
}
}
seq_list.h
#ifndef __HEAD_SEQ_LIST_H__
#define __HEAD_SEQ_LIST_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include <errno.h>
#define MAX 10
typedef struct{
char name[128];
char id[128];
uint8_t age;
}datatype_t;
typedef struct{
datatype_t buffer[MAX];
uint8_t n;
}seqlist_t;
extern seqlist_t* create_empty_seqlist();
extern bool seqlist_is_full(seqlist_t* p);
extern bool seqlist_insert_data(seqlist_t* p,datatype_t* p_data);
extern bool seqlist_is_empty(seqlist_t* p);
extern void seqlist_display(seqlist_t* p);
#endif
main.c
#include "seq_list.h"
void menu();
void insert_data(seqlist_t* p_seq);
void display_data(seqlist_t* p);
int main(){
seqlist_t* p_seq = NULL;
do{
menu();
int select;
printf("请选择");
scanf("%d",&select);
switch(select){
case 1:
// 初始化顺序表
p_seq = create_empty_seqlist();
printf("初始化成功!\n");
break;
case 2:
// 增加学生
if(p_seq==NULL){
printf("请先进行初始化\n");
}else {
insert_data(p_seq);
}
break;
case 3:
display_data(p_seq);
break;
case 0:
printf("welcome to next come.\n");
exit(EXIT_SUCCESS);
default:
printf("选择错误,请重新选择\n");
}
}while(1);
return 0;
}
// 菜单
void menu(){
printf("------------------顺序表----------------------\n");
printf("1、初始化顺序表\n");
printf("2、增加学生\n");
printf("3、显示学生信息\n");
printf("0、退出\n");
printf("----------------------------------------------\n");
}
// 增加学生
void insert_data(seqlist_t* p_seq){
datatype_t* data = (datatype_t*)malloc(sizeof(datatype_t));
if(data==NULL){
printf("添加学生失败\n");
return;
}
memset(data,0,sizeof(datatype_t));
printf("请输入学生姓名:");
while(getchar()!='\n');
fgets(data->name,sizeof(data->name)-1,stdin);
data->name[strlen(data->name)-1]='\0';
printf("请输入学号:");
fgets(data->id,sizeof(data->id)-1,stdin);
data->id[strlen(data->id)-1]='\0';
printf("请输入年龄:");
scanf("%hhd",&data->age);
// 将学生加入到顺序表中
bool result = seqlist_insert_data(p_seq,data);
if(result==false){
printf("空间已满,添加失败!\n");
}else{
printf("恭喜您,添加成功^_^\n");
}
}
void display_data(seqlist_t* p){
printf("姓名\t学号\t年龄\n");
if(seqlist_is_empty(p)){
printf("No Data\n");
}else{
seqlist_display(p);
}
}
标签:return,seq,第一天,--,seqlist,datatype,printf,数据结构,data
From: https://blog.csdn.net/xujiashuo1/article/details/140695698