sqlist.h
包含对结构体和结构体指针的定义及各种功能函数的声明
#define N 128
typedef int data_t;
typedef struct {
data_t data[N];
int last;
}sqlist,*sqlink;
sqlink list_create();
int list_clear(sqlink L);
int list_empty(sqlink L);
int list_length(sqlink L);
int list_locate(sqlink L,data_t value);
int list_insert(sqlink L,data_t value,data_t pos);
int list_show(sqlink L);
int list_delete(sqlink L);
int delete_one(sqlink L,data_t pos);
int list_and(sqlink L1,sqlink L2);
int list_del_repetition(sqlink L);
sqlist.c
包含各种功能函数的具体实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"
sqlink list_create()
{
sqlink L;
L = (sqlink)malloc(sizeof(sqlist));
if(L == NULL)
{
printf("use malloc defeated\n");
return L;
}
memset(L ,0 ,sizeof(sqlist));
L -> last = -1;
return L;
}
int list_clear(sqlink L)
{
if(L == NULL)
{
return -1;
}
memset(L ,0 ,sizeof(sqlist));
L -> last = -1;
return 0;
}
int list_delete(sqlink L)
{
if(L == NULL)
return -1;
free(L);
L = NULL;
}
int delete_one(sqlink L,data_t pos)
{
if(L->last == -1)
{
printf("this is empty\n");
return -1;
}
if(pos < 0 || pos > L->last+1)
{
printf("pos is invalid\n");
return -1;
}
for(int i = pos;i < L->last;i++)
{
L->data[i] = L->data[i+1];
}
L->last--;
}
int list_empty(sqlink L)
{
if(L->last == -1)
return 1;
else
return 0;
}
int list_length(sqlink L)
{
if(L->last == -1)
return -1;
return (L->last+1);
}
int list_locate(sqlink L,data_t value)
{
int i ;
for (i = 0; i <= L->last; i++) {
if (L->data[i] == value)
return i;
}
return -1;
}
int list_insert(sqlink L,data_t value,data_t pos)
{
if(L->last == N-1)
{
printf("list is full\n");
return -1;
}
if(pos < 0 || pos > L->last+1)
{
printf("pos is invalid\n");
return -1;
}
for(int i = L->last;i >= pos;i--)
{
L->data[i+1] = L->data[i];
}
L->data[pos] = value;
L->last++;
return 0;
}
int list_and(sqlink L1,sqlink L2)
{
int i = 0;
for(;i <= L2->last;i++)
{
if(list_locate(L1,L2->data[i]) == -1)
list_insert(L1,L2->data[i],L1->last);
}
return 0;
}
int list_del_repetition(sqlink L)
{
if(L->last == -1)
{
printf("this is full list\n");
return -1;
}
for(int i=0;i < L->last;i++)
for(int j = i+1;j <= L->last;j++)
{
if(L->data[i] == L->data[j])
{
L->data[i] = L->data[i+1];
L->last--;
}
}
return 0;
}
int list_show(sqlink L)
{
int i;
if(L == NULL)
{
return -1;
}
if(L->last == -1)
printf("this list is NULL\n");
for(i = 0;i <= L->last;i++)
{
printf("%d ",L->data[i]);
}
puts("");
return 0;
}
test.c
主函数所在文件,由于最后验证的功能函数是删除重复内容所以主函数是这样的
#include <stdio.h>
#include "sqlist.h"
int test_1();
void test_2();
int main()
{
test_2();
return 0;
}
void test_2()
{
sqlink L;
L = list_create();
list_insert(L, 10, 0);
list_insert(L, 10, 0);
list_insert(L, 11, 0);
list_insert(L, 12, 0);
list_insert(L, 13, 0);
list_show(L);
printf("************************\n");
list_del_repetition(L);
list_show(L);
}
int test_1()
{
sqlink L,L1;
L = list_create();
if(L == NULL)
{
return -1;
}
list_insert(L, 10, 0);
list_insert(L, 11, 0);
list_insert(L, 12, 0);
list_insert(L, 13, 0);
list_show(L);
delete_one(L ,2);
list_show(L);
//list_delete(L);
L1 = list_create();
list_insert(L1, 15, 0);
list_insert(L1, 11, 0);
list_insert(L1, 12, 0);
list_insert(L1, 13, 0);
list_and(L,L1);
list_show(L);
list_show(L1);
list_delete(L);
list_delete(L1);
}
懒着再截屏了,展示一下最后一次实现的功能,曾经用C++实现过现在从写一次比之前更完善一些,防止出现中文乱码,所有提示都用英文写的,中式英文凑合看吧。