C语言实现数据结构-顺序表
#include<stdio.h>
#include<stdlib.h>
#include"sqlist.h"
/* 两种自定义的数据类型
typedef int datatype;
typedef struct node_st
{
datatype data[DATASIZE];
int last;
}sqlist;
*/
//创建一个顺序表的两种方法
sqlist * sqlist_create()
{
sqlist *me;
me = malloc(sizeof(*me));
if(me == NULL)
return NULL;
me->last = -1;
return me;
}
void sqlist_create1(sqlist **ptr)
{
*ptr = malloc(sizeof(**ptr));
if(*ptr == NULL)
return;
(*ptr)->last = -1;
return;
}
//实现顺序表固定位置上的插入
int sqlist_isert(sqlist *me ,int i,datatype *data)
{
int j;
if(me->last == DATASIZE-1)
return -1;
if(i<0||i>me->last+1)
return -2;
for(j = me->last;j>=i;j--)
{
me->data[j+1] = me->data[j];
}
me->data[i] = *data;
me->last++;
return 0;
}
//实现顺序表固定位置上的删除
int sqlist_delete(sqlist *me,int i)
{
int j;
if(i<0||i>me->last)
return -1;
for(j = i+1;j<=me->last;j++)
me->data[j-1] = me->data[j];
me->last--;
return 0;
}
//实现顺序表的查找
int sqlist_find(sqlist *me,datatype *data)
{
int i;
if(sqlist_isempty(me) == 0)
return -1;
for(i = 0;i<=me->last;i++)
if(me->data[i] == *data)
return i;
return -1;
}
//判断顺序表是否为空
int sqlist_isempty(sqlist *me)
{
if(me->last == -1)
return 0;
return -1;
}
//设置顺序表为空
int sqlist_setempty(sqlist *me)
{
me->last = -1;
return 0;
}
//返回顺序表的元素个数
int sqlist_getnum(sqlist *me)
{
return (me->last+1);
}
//显示顺序表元素
void sqlist_display(sqlist *me)
{
int i;
if(me->last == -1)
return;
for(i = 0;i<=me->last;i++)
printf("%d ",me->data[i]);
printf("\n");
return;
}
//释放内存空间
int sqlist_destory(sqlist *me)
{
free(me);
}
//合并两个顺序表,不会出现重复元素
int sqlist_union(sqlist *list1,sqlist *list2)
{
int i;
for(i = 0;i<=list2->last;i++)
if((sqlist_find(list1,&list2->data[i]))<0)
sqlist_isert(list1,0,&list2->data[i]);
return 0;
}