线性表:
实现创建线性表,头插法,尾插法插入数据,指定位置插入数据,指定位置删除数据功能
头文件Seq.h:
#ifndef _SEQ_H_
#define _SEQ_H_
#define SIZE 10
#define ADD_SIZE 5
typedef int DATA;
typedef enum{TRUE,FALSE,ERROR}BOOL;
typedef struct deque
{
DATA *pData;
DATA maxlen;
DATA len;
}Seq;
// 创建顺序表
Seq *CreatDeq();
//释放空间
void Distory(Seq *s);
//打印线性表
void Display(Seq *s);
//重新分配空间
BOOL *AgainMalloc(Seq *s);
// 插入数据:尾插
// s:要插入的顺序表
// n:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Insert(Seq *s,DATA n);
// 插入数据:头插
// s:要插入的顺序表
// data:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Head_Insert(Seq *s,DATA n);
// 插入数据:根据位置插入数据
// s :要插入的顺序表
// index: 要插入位置的下标
// n:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Insert_Pos(Seq *s,DATA index,DATA n);
// 插入数据:根据位置删除数据
// s :要删除的顺序表
// index: 要删除位置的下标
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Delete_Pos(Seq *s,DATA index);
#endif //_SEQ_H_
功能实现函数Seq.c:
#include "Seq.h"
#include <stdlib.h>
#include <stdio.h>
Seq *Creat()
{
Seq *pa = (Seq*)malloc(sizeof(Seq)/sizeof(char));
if(NULL == pa)
{
return NULL;
}
pa->pData = (DATA*)malloc(sizeof(DATA)/sizeof(char)*10);
if(NULL == pa->pData)
{
free(pa);
return NULL;
}
pa->len = 0;
pa->maxlen = SIZE;
return pa;
}
BOOL Insert(Seq *s,DATA n)
{
if(NULL == s)
{
return ERROR;
}
if(s->len == s->maxlen)
{
if(AgainMalloc(s)!=TRUE)
return FALSE;
}
s->pData[s->len++]=n;
return TRUE;
}
BOOL Head_Insert(Seq *s,DATA n)
{
if(NULL == s)
{
return ERROR;
}
if(s->len == s->maxlen)
{
if(AgainMalloc(s)!=TRUE)
return FALSE;
}
int i;
for(i = s->len-1;i>=0;i--)
{
s->pData[i+1] = s->pData[i];
}
s->pData[0] = n;
s->len++;
return TRUE;
}
BOOL Insert_Pos(Seq *s,DATA index,DATA n)
{
if(NULL == s||index <=0||index>s->len)
{
return ERROR;
}
if(s->len == s->maxlen)
{
if(AgainMalloc(s)!=TRUE)
return FALSE;
}
int i;
for(i = s->len-1;i>=index;i--)
{
s->pData[i+1] = s->pData[i];
}
s->pData[index] = n;
s->len++;
return TRUE;
}
BOOL Delete_Pos(Seq *s,DATA index)
{
if(NULL == s||index <=0||index>=s->len)
{
return ERROR;
}
if(s->len == s->maxlen)
{
if(AgainMalloc(s)!=TRUE)
return FALSE;
}
int i;
for(i = index;i<s->len-1;i++)
{
s->pData[i] = s->pData[i+1];
}
s->len--;
return TRUE;
}
BOOL *AgainMalloc(Seq *s)
{
if(NULL == s)
{
return ;
}
DATA newsize = (sizeof(DATA)/sizeof(char))*(s->maxlen+ADD_SIZE);
DATA *p = (DATA*)realloc(s->pData,newsize);
s->pData = p;
s->maxlen = newsize;
return TRUE;
}
void Distory(Seq *s)
{
if(NULL == s)
{
return ;
}
free(s->pData);
free(s);
}
void Display(Seq *s)
{
int i;
for(i = 0;i<s->len;i++)
{
printf("%-4d",s->pData[i]);
}
printf("\n");
}
主函数main
#include <stdio.h>
#include "Seq.h"
int main()
{
Seq *s = Creat();
if (NULL == s)
{
printf ("创建顺序表失败\n");
}
printf ("创建顺序表成功\n");
int i;
for (i = 0; i < 18; i++)
{
Insert(s,i);
}
Display(s);
Insert_Pos(s,4,123);
Display(s);
Delete_Pos(s,2);
Display(s);
return 0;
}