Day01_C数据结构
01.数据结构
02.段错误出现的四种场景
02.实现顺序表的头插、尾插、头删、尾删(释放顺序表)
main.c
#include "seq.h"
int main(){ seq_p S=create_seqlist(); inputall(S); insert_head(S); delete_head(S); insert_tail(S); delete_tail(S); seq_free(S); return 0;
}
seq.c
#include "seq.h" seq_p create_seqlist() { seq_p S=(seq_p)malloc(sizeof(seq_list)); if(S==NULL){ return NULL; } bzero(S,sizeof(seq_list)); return S; } int empty_seq(seq_p S) { if(S==NULL){ printf("入参为空\n"); return -2; } return S->len==0?1:0; } int full_seq(seq_p S) { if(S==NULL){ printf("入参为空\n"); return -2; } return S->len==MAX?1:0; } //输出数据函数 void output(seq_p S) { int i; for(i=0;i<S->len;++i){ printf("%d ",S->arr[i]); } puts(""); } //输入数据函数 seq_p input(seq_p S) { printf("请输入您需要插入的数据:"); scanf("%d",&S->number); return S; } //先插入数据中的顺序列表 seq_p inputall(seq_p S) { printf("请输入您要放入空列表中的个数:"); scanf("%d",&S->num1); printf("请输入数据:"); getchar(); for(int i=0;i<S->num1;++i){ scanf("%d",&S->arr[i]); S->len++; } return S; } //头插 seq_p insert_head(seq_p S) { int m=full_seq(S); if(m==1){ printf("顺序列表已满,不能插入数据\n"); output(S); return S; }else if(m==0){ input(S); int i; for(i=S->len;i>0;--i){ S->arr[i]=S->arr[i-1]; } S->arr[0]=S->number; S->len++; printf("输出插入头部数据的顺序列表:\n"); output(S); return S; } } //头删 seq_p delete_head(seq_p S) { int n=empty_seq(S); if(n==1){ printf("顺序列表为空,没有数据可以删除\n"); return S; }else if(n==0){ for(int i=1;i<S->len;++i){ S->arr[i-1]=S->arr[i]; } S->len=S->len-1; printf("输出删除头部数据的顺序列表\n"); output(S); return S; } } //尾插 seq_p insert_tail(seq_p S) { int m=full_seq(S); if(m==1){ printf("顺序列表已满,不能插入尾部数据\n"); output(S); return S; }else if(m==0){ input(S); S->arr[S->len]=S->number; S->len++; printf("输出插入尾部数据的顺序列表\n"); output(S); return S; } } //尾删 seq_p delete_tail(seq_p S) { int n=empty_seq(S); if(n==1){ printf("顺序列表为空,尾部没有数据可以删除\n"); return S; }else if(n==0){ S->arr[S->len]=0; S->len=S->len-1; printf("输出删除尾部数据的顺序列表:\n"); output(S); return S; } } //释放顺序表 seq_p seq_free(seq_p S) { printf("释放顺序列表前数据:\n"); output(S); if(S!=NULL){ free(S); S=NULL; } printf("%p\n",S); return S; }
seq.h
#ifndef __SEQ_H__
#define __SEQ_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 6
typedef struct seq_list
{int arr[MAX];int len;int num1;//开始输入数组中个数int number;//输入数组中的数据
}seq_list,*seq_p;
seq_p create_seqlist();
int empty_seq(seq_p S);
int full_seq(seq_p S);
void output(seq_p S);
seq_p input(seq_p S);
seq_p inputall(seq_p S);seq_p insert_head(seq_p S);
seq_p delete_head(seq_p S);
seq_p insert_tail(seq_p S);
seq_p delete_tail(seq_p S);
seq_p seq_free(seq_p S);
#endif