sqlist.h :一般装头文件,函数的声明,全局变量等
/*===============================================
* 文件名称:sqlist.h
* 创 建 者 :ydx
* 创建日期:2023年03月09日
* 描 述:
================================================*/
#ifndef _SQLIST_H
#define _SQLIST_H
#define SIZE 100
typedef int data_t;
typedef struct {
data_t data[SIZE];
int index;
}sqlist_t;
//创建
sqlist_t *sqlistCreate();
//判空
int sqlistIsEmpty(sqlist_t *p);
//判满
int sqlistIsFull(sqlist_t *p);
//插入
int sqlistInsertPos(sqlist_t *p,data_t data,int pos);
//有效长度
int sqlistGetLength(sqlist_t *p);
//遍历
void sqlistShow(sqlist_t *p);
//按位置删除
int sqlistDeletePos(sqlist_t *p,int pos);
//按数据删除
int sqlistDeleteData(sqlist_t *p,data_t data);
//按位置查找
data_t sqlistSearchPos(sqlist_t *p,int pos);
//按数据查找
int sqlistSearchData(sqlist_t *p,data_t data);
//按位置修改
int sqlistUpdataPos(sqlist_t *p,data_t newdata,int pos);
//按数据修改
int sqlistUpdataData(sqlist_t *p,data_t olddata,data_t newdata);
//清空表
int sqlistClear(sqlist_t *p);
//销毁表
int sqlistDestroy(sqlist_t **p);
#endif
sqlist.c :函数功能的实现
/*===============================================
* 文件名称:sqlist.c
* 创 建 者 :ydx
* 创建日期:2023年03月09日
* 描 述:
================================================*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"
sqlist_t *sqlistCreate()
{
sqlist_t *p = (sqlist_t *)malloc(sizeof(sqlist_t));
if(NULL == p)
{
return NULL;
}
memset(p,0,sizeof(sqlist_t));
p->index = -1;
return p;
}
int sqlistIsEmpty(sqlist_t *p)
{
if(NULL == p)
{
return -1;
}
if(p->index == -1)
{
return 1;
}
else
{
return 0;
}
//return p->sqlist == -1 ? 0 : 1;
}
int sqlistIsFull(sqlist_t *p)
{
if(NULL == p)
{
return -1;
}
if(p->index == SIZE - 1)
{
return 1;
}
else
return 0;
}
int sqlistGetLength(sqlist_t *p)
{
if(NULL == p)
{
return -1;
}
return p->index + 1;
}
int sqlistInsertPos(sqlist_t *p,data_t data,int pos)
{
if(NULL == p)
{
return -1;
}
if(sqlistIsFull(p))
{
return -1;
}
//3.判断位置pos是否合法
int len = p->index + 1;
if(pos < 0 || pos > len)
{
printf("pos error...\n");
return -1;
}
//插入元素
int i = 0;
for(i = len-1;i >= pos;i--)
{
p->data[i+1] = p->data[i];
}
p->data[pos] = data;
p->index++;
return 0;
}
/*int sqlistGetLength(sqlist_t *p)
{
if(NULL == p)
{
return -1;
}
return p->index + 1;
}
*/
void sqlistShow(sqlist_t *p)
{
if(NULL == p)
{
return ;
}
int len = sqlistGetLength(p);
for(int i = 0;i < len;i++)
{
printf("%d ",p->data[i]);
}
puts("");
}
int sqlistDeletePos(sqlist_t *p,int pos)
{
if(NULL == p)
{
return -1;
}
if(sqlistIsEmpty(p))
{
return -1;
}
int len = sqlistGetLength(p);
//判断位置是否合法
if(pos < 0 || pos > len -1)
{
return -1;
}
//4.删除
for(int i = pos;i < len - 1;i++)
{
p->data[i] = p->data[i+1];
}
p->index--;
return 0;
}
int sqlistSearchData(sqlist_t *p,data_t data)
{
if(NULL == p)
{
return -1;
}
if(sqlistIsEmpty(p))
{
return -1;
}
for(int i = 0;i < sqlistGetLength(p); i++)
{
if(p->data[i] == data)
{
return i;
}
}
return -1;
}
int sqlistDeleteData(sqlist_t *p,data_t data)
{
if(NULL == p)
{
return -1;
}
int pos = sqlistSreachData(p,data);
if(pos == -1)
{
return 1;
}
sqlistDeletePos(p,pos);
return 0;
}
data_t sqlistSearchPos(sqlist_t *p,int pos)
{
if(NULL == p)
{
return (data_t)-1;
}
if(pos < 0 || pos > sqlistGetLength(p)-1)
{
return (data_t)-1;
}
return p->data[pos];
}
int sqlistUpdataPos(sqlist_t *p,data_t newdata,int pos)
{
if(NULL == p)
{
return -1;
}
if(sqlistIsEmpty(p))
{
return -1;
}
if(pos < 0 || pos > sqlistGetLength(p)-1)
{
return -1;
}
p->data[pos] = newdata;
return 0;
}
int sqlistUpdataData(sqlist_t *p,data_t olddata,data_t newdata)
{
if(NULL == p)
{
return -1;
}
if(sqlistIsEmpty(p))
{
return -1;
}
for(int i = 0;i < sqlistGetLength(p);i++)
{
if(p->data[i] == olddata)
{
p->data[i] = newdata;
return 0;
}
}
printf("no the olddata!\n");
return -1;
}
int sqlistClear(sqlist_t *p)
{
if(NULL == p)
{
return -1;
}
p->index = -1;
return 0;
}
int sqlistDestroy(sqlist_t **p)
{
if(NULL == *p)
{
return -1;
}
free(*p);
*p = NULL;
return 0;
}
main.c :函数的调用和实现
/*===============================================
* 文件名称:main.c
* 创 建 者 :ydx
* 创建日期:2023年03月09日
* 描 述:
===============================================*/
#include <stdio.h>
#include "sqlist.h"
int main()
{
sqlist_t *p = sqlistCreate();
if(NULL == p)
{
printf("create fail...\n");
return -1;
}
printf("create success...\n");
//sqlistDestroy(&p);
// p = NULL;
int i = 0;
for(;i < 10;i++)
{
sqlistInsertPos(p,i+1,0);
}
printf("empty : %d\n",sqlistIsEmpty(p));
printf("full : %d\n",sqlistIsFull(p));
printf("len : %d\n",sqlistGetLength(p));
sqlistShow(p);
sqlistDeletePos(p,2);
printf("len : %d\n",sqlistGetLength(p));
sqlistShow(p);
int pos = sqlistSearchData(p,8);
if(pos == -1)
{
printf("search failed..\n");
}
else{
printf("pos: %d\n",pos);
}
// sqlistClear(p);
data_t data = sqlistSearchPos(p,6);
if(data == (data_t)-1)
{
printf("search failed..\n");
}
else
{
printf("data : %d\n",data);
}
sqlistUpdataPos(p,89,0);
sqlistShow(p);
sqlistUpdataData(p,3,66);
sqlistShow(p);
sqlistUpdataData(p,52,66);
return 0;
}