顺序表
Seq.h文件
#ifndef _SEQ_H_
#define _SEQ_H_
#define INE_SIZE 10
#define ADD_SIZE 5
typedef enum {TRUE,FLAST,ERROR}BOOL;
typedef int Data;
typedef struct _seq
{
Data *pData;
int maxSize;
int size;
}Seq;
//创建顺序表
Seq* Create();
//销毁顺序表
void Destroy(Seq *pb);
//为顺序表重新分配空间
BOOL AgainMalloc(Seq *pb);
//插入数据:尾插
//pb是要插入的顺序表
//data是要插入的数据
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL insert_Last(Seq *pb,Data data);
//插入数据:头插
//pb是要插入的顺序表
//data是要插入的数据
//index是顺序表的下标
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL insert_Head(Seq *pb, Data data);
//插入数据:根据位置插入数据
//pb是要插入的顺序表
//data是要插入的数据
//index是顺序表的下标
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL insert_Pos(Seq *pb, int index,Data data);
//删除数据
//pb是要插入的顺序表
//index是顺序表的下标
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL Delete(Seq *pb, int index);
//删除某个数据
//pb是要插入的顺序表
//data是要删除的某个的数据
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL Delete_Data(Seq *pb,Data data);
//查找数据
//[in]pb是要插入的顺序表
//[in]data是要查找的某个的数据
//[out]pIndex是传出的下标
//返回值:返回成功TRUE,返回失败FLAST,其他返回ERROR
BOOL Find_Data(Seq *pb,Data data,int *pIndex);
//修改数据
//pb是要插入的顺序表
//data是要修改的数据
//index是顺序表的下标
BOOL Modify_Data(Seq *pb,Data data,int index);
//合并两张有序表
//s1是第一张表
//s2是第二张表
//返回值:成功则返回第三张表,否则返回失败
Seq *Merge_List(Seq *pb1,Seq *pb2);
//打印函数
void Display(Seq *pb);
#endif//_SEQ_H_
Seq.c文件
#include "Seq.h"
#include <stdlib.h>
#include <stdio.h>
Seq* Create()
{
Seq *pb=(Seq *)malloc(sizeof(Seq)/sizeof(char) );
if(NULL==pb)
{
return NULL;
}
pb->pData=(Data *)malloc(sizeof(Data)/sizeof(char)*INE_SIZE);
if(NULL==pb->pData)
{
free(pb);
return NULL;
}
pb->maxSize=INE_SIZE;
pb->size=0;
return pb;
}
BOOL AgainMalloc(Seq *pb)
{
if(NULL==pb)
return FLAST;
Data newsize=(sizeof(Data)/sizeof(char)*(pb->maxSize+ADD_SIZE));
Data *p=realloc(pb->pData,newsize );
if(NULL==p)
return TRUE;
pb->pData=p;
pb->maxSize=newsize;
}
BOOL insert_Last(Seq *pb,Data data)
{
if(NULL==pb)
return ERROR;
if(pb->size==pb->maxSize)
{
if(AgainMalloc(pb)!=TRUE);
}
pb->pData[pb->size++]=data;
return TRUE;
}
BOOL insert_Head(Seq *pb, Data data)
{
if(NULL==pb)
return ERROR;
if(pb->size==pb->maxSize)
{
if(AgainMalloc(pb)!=TRUE);
return FLAST;
}
int i;
for(i=pb->size-1;i>=0;i--)
{
pb->pData[i+1]=pb->pData[i];
}
pb->pData[0]=data;
pb->size++;
return TRUE;
}
BOOL insert_Pos(Seq *pb, int index,Data data)
{
if(NULL==pb||index<0||index>pb->size)
return ERROR;
if(pb->size==pb->maxSize)
{
if(AgainMalloc(pb)!=TRUE);
return FLAST;
}
int i;
for(i=pb->size;i>=index;i--)
{
pb->pData[i+1]=pb->pData[i];
}
pb->pData[index]=data;
pb->size++;
return TRUE;
}
BOOL Delete(Seq *pb, int index)
{
if(NULL==pb||index<0||index>=pb->size)
return ERROR;
int i;
for(i=index;i<pb->size-1;i++)
{
pb->pData[i]=pb->pData[i+1];
}
pb->size--;
return TRUE;
}
BOOL Delete_Data(Seq *pb,Data data)
{
if(NULL==pb)
return ERROR;
int i;
for(i=0;i<pb->size;i++)
{
if(pb->pData[i]==data)
{
Delete(pb,i);
return TRUE;
}
}
return FLAST;
}
BOOL Find_Data(Seq *pb,Data data,int *pIndex)
{
if(NULL==pb)
return ERROR;
int i;
for(i=0;i<pb->size;i++)
{
if(pb->pData[i]==data)
{
*pIndex=i;
return TRUE;
}
}
return FLAST;
}
BOOL Modify_Data(Seq *pb,Data data,int index)
{
if(NULL==pb||index<0||index>=pb->size)
return ERROR;
pb->pData[index]=data;
return FLAST;
}
Seq *Merge_List(Seq *pb1,Seq *pb2)
{
if(NULL==pb1||NULL==pb2)
return NULL;
Seq *pb3=(Seq *)malloc(sizeof(Seq)/sizeof(char) );
if(NULL==pb3)
{
return NULL;
}
pb3->pData=(Data *)malloc(sizeof(Data)/sizeof(char)*(pb1->size+pb2->size));
if(NULL==pb3->pData)
{
free(pb3);
return NULL;
}
pb3->maxSize=pb1->size+pb2->size;
pb3->size=pb1->size+pb2->size;
int i=0;//pb1数组下标
int j=0;//pb2数组下标
int k=0;//pb3数组下标
while(i<pb1->size&&j<pb2->size)
{
if(pb1->pData[i]<pb2->pData[j])
{
pb3->pData[k++]=pb1->pData[i++];
}
else
{
pb3->pData[k++]=pb2->pData[j++];
}
}
while(i<pb1->size)
{
pb3->pData[k++]=pb1->pData[i++];
}
while(j<pb2->size)
{
pb3->pData[k++]=pb2->pData[j++];
}
return pb3;
}
void Display(Seq *pb)
{
if(NULL==pb)
return;
int i;
for(i=0;i<pb->size;i++)
{
printf("%-4d",pb->pData[i]);
}
printf("\n");
}
void Destroy(Seq *pb)
{
if(NULL==pb)
return;
free(pb);
free(pb->pData);
}