顺序表函数

#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