#include "Seq.h"
#include <stdlib.h>
#include <stdio.h>
//创建顺序表
Seq* Create()
{
Seq *s = (Seq*)malloc(sizeof(Seq)/sizeof(char));
if (NULL == s)
return NULL;
// 给顺序表分配空间
s->pData = (Data*)malloc(sizeof(Data)/sizeof(char) * INIT_SIZE);
if(NULL == s->pData)
{
free(s);
return NULL;
}
s->maxSize = INIT_SIZE;
s->size = 0;
return s;
}
//为顺序表重新分配空间
BOOL AgainMalloc(Seq* s)
{
if(NULL == s)
return ERROR;
int newSize = sizeof(Data)/sizeof(char)*(s->maxSize+ADD_SIZE);
Data* p = (Data*)realloc(s->pData, newSize);
if (NULL == p)
return FALSE;
s->pData = p;
s->maxSize += ADD_SIZE;
return TRUE;
}
//尾插
BOOL Insert_Last(Seq* s, Data data)
{
if (NULL == s)
return ERROR;
if (s->size == s->maxSize)
{
if (AgainMalloc(s) != TRUE)
return FALSE;
}
s->pData[s->size++] = data;
return TRUE;
}
//头插
BOOL Insert_Head(Seq* s, Data data)
{
if (NULL == s)
return ERROR;
if (s->size == s->maxSize)
{
if (AgainMalloc(s) != TRUE)
return FALSE;
}
int i = 0;
for (i = s->size-1; i>=0; i--)
{
s->pData[i+1] = s->pData[i];
}
s->pData[0] = data;
s->size++;
return TRUE;
}
//根据位置插入数据
BOOL Insert_Pos(Seq* s, int index, Data data)
{
if (NULL == s || index < 0 || index > s->size)
return ERROR;
if (s->size == s->maxSize)
{
if (AgainMalloc(s) != TRUE)
return FALSE;
}
int i = 0;
for (i = s->size-1; i>=index; i--)
{
s->pData[i+1] = s->pData[i];
}
s->pData[index] = data;
s->size++;
return TRUE;
}
//删除数据,根据位置删除
BOOL Delete_Pos(Seq* s, int index)
{
if (NULL == s || index < 0 || index >= s->size)
return ERROR;
int i;
for (i = index; i <s->size-1; i++)
{
s->pData[i] = s->pData[i+1];
}
s->size--;
return TRUE;
}
//删除数据,根据数据删除
BOOL Delete_Data(Seq* s, Data data)
{
if (NULL == s)
return ERROR;
int i;
for (i = 0; i <s->size; i++)
{
if (s->pData[i] == data)
{
Delete_Pos(s,i);
return TRUE;
}
}
return FALSE;
}
//查找数据
BOOL Find_Data(Seq* s, Data data, int *pIndex)
{
if (NULL == s)
return ERROR;
int i;
for (i = 0; i <s->size; i++)
{
if (s->pData[i] == data)
{
*pIndex = i;
return TRUE;
}
}
return FALSE;
}
//修改数据
BOOL Modify_Data(Seq* s, int index, Data data)
{
if (NULL == s || index < 0 || index >= s->size)
return ERROR;
s->pData[index] = data;
return TRUE;
}
//合并两张有序表
Seq *Merge_List(Seq* s1,Seq* s2)
{
if (NULL == s1 || NULL == s2)
return NULL;
Seq *s3 = (Seq*)malloc(sizeof(Seq)/sizeof(char));
if (NULL == s3)
return NULL;
s3->pData = (Data*)malloc(sizeof(Data)/sizeof(char) * (s1->size+s2->size));
if(NULL == s3->pData)
{
free(s3);
return NULL;
}
s3->maxSize = s1->size+s2->size;
s3->size = s1->size+s2->size;
int i = 0;//s1的下标
int j = 0;//s2的下标
int k = 0;//s3的下标
while(i < s1->size && j < s2->size)
{
if(s1->pData[i] < s2->pData[j])
s3->pData[k++] = s1->pData[i++];
else
s3->pData[k++] = s2->pData[j++];
}
while(i < s1->size)
{
s3->pData[k++] = s1->pData[i++];
}
while(j < s2->size)
{
s3->pData[k++] = s2->pData[j++];
}
return s3;
}
//打印
void Display(Seq* s)
{
if (NULL == s)
return;
int i;
for (i = 0; i < s->size; i++)
{
printf ("%-4d", s->pData[i]);
}
printf ("\n");
}
//销毁顺序表
void Destroy(Seq* s)
{
if (NULL == s)
return;
free(s->pData);
free(s);
}
顺序表函数
猜你喜欢
转载自blog.csdn.net/weixin_43664746/article/details/84886542
今日推荐
周排行