数据结构代码分享-1 顺序表
add.c
#include<stdio.h>
#include "add.h"
//1.创建一个空的顺序表
seqlist_t *CreateEpSeqlist()
{//开辟空间seqlist_t *p = (seqlist_t*)malloc(sizeof(seqlist_t));//容错判断if(p==NULL){printf("error\n");return NULL;}return p;
}//2.向顺序表的指定位置插入数据
int InsertIntoSeqlist(seqlist_t *p, int post, int data)
{//容错判断if(post < 0 || post > p->last+1 || IsFullSeqlist(p)==0){printf("error\n");return -1;} //从post位置到last位置整体向后移动一位,last+1;for(int i=p->last;i>=post;i--){p->data[i+1]=p->data[i];}p->data[post]=data;p->last++;return p;
}
//3.遍历顺序表sequence顺序list表
void ShowSeqlist(seqlist_t *p)
{for(int i=0;i<=p->last;i++){printf("%d ",p->data[i]);}printf("\n");
}
//4.判断顺序表是否为满,满返回1,未满返回0
int IsFullSeqlist(seqlist_t *p)
{return p->last == N-1;
}
//5.判断顺序表是否为空
int IsEpSeqlist(seqlist_t *p)
{return p->last==-1;
}
//6.删除顺序表中指定位置的数据
int DeleteIntoSeqlist(seqlist_t *p, int post)
{//容错判断if(post<0 || post>p->last){printf("error\n");return -1;}//从post+1到last整体往前移一位,last-1;for(int i=post+1;i<=p->last;i++){p[i]=p[i-1];}p->last--;return 0;
}
//7.清空顺序表 (清空:访问不到,但是内存中还有;销毁:内存清空)
void ClearSeqList(seqlist_t *p)
{p->last=-1;
}
//8.修改指定位置的数据,post为被修改数据位置,data为修改成的数据
int ChangePostSeqList(seqlist_t *p,int post,int data)
{//容错判断if(post<0 || post>p->last || p->last == -1){printf("error\n");return -1;}for(int i=0;i<p->last;i++){if(post==i){p->data[i]=data;}}
}
//9.查找制定数据出现位置,data为被查找的数据,返回下标,未找到返回-1
int SearchDataSeqList(seqlist_t *p,int data)
{//容错if(p->last==-1){printf("error\n");return -1;}for (int i = 0; i <= p->last; i++){if(p->data[i]==data){return i;}}return -1;
}
add.h
#ifndef __ADD_H__
#define __ADD_H__
#define N 20
typedef struct seqlist
{int data[N];int last; //代表数组中最后一个有效元素的下标
} seqlist_t;//1.创建一个空的顺序表
seqlist_t *CreateEpSeqlist();
//2.向顺序表的指定位置插入数据
int InsertIntoSeqlist(seqlist_t *p, int post, int data);
//3.遍历顺序表sequence顺序list表
void ShowSeqlist(seqlist_t *p);
//4.判断顺序表是否为满,满返回1,未满返回0
int IsFullSeqlist(seqlist_t *p);
//5.判断顺序表是否为空
int IsEpSeqlist(seqlist_t *p);
//6.删除顺序表中指定位置的数据
int DeleteIntoSeqlist(seqlist_t *p, int post);
//7.清空顺序表 (清空:访问不到,但是内存中还有;销毁:内存清空)
void ClearSeqList(seqlist_t *p);
//8.修改指定位置的数据,post为被修改数据位置,data为修改成的数据
int ChangePostSeqList(seqlist_t *p,int post,int data);
//9.查找制定数据出现位置,data为被查找的数据,返回下标,未找到返回-1
int SearchDataSeqList(seqlist_t *p,int data);
#endif
main.c
#include<stdio.h>
#include"add.h"
#include<stdlib.h>int main(int argc, char const *argv[])
{seqlist_t *p = CreateEpSeqlist();int flag = IsEpSeqlist(p);if(flag == 1)printf("seqlist is Ep\n");printf("%d\n", p->last);for (int i = 0; i < 5; i++){InsertIntoSeqlist(p, i, i+1);}ShowSeqlist(p);DeleteIntoSeqlist(p, 0);ShowSeqlist(p);InsertIntoSeqlist(p, 1, 100);ShowSeqlist(p);ChangePostSeqList(p, 0, 1103);ShowSeqlist(p);printf("Search 5: %d\n", SearchDataSeqList(p, 5));printf("Search 100: %d\n", SearchDataSeqList(p, 100));// 相关操作完成,释放空间free(p);p = NULL;return 0;
}