数据结构第一天
一、数据结构的组织形式
1、线性表:除去头和尾,中间元素有且仅有一个前继,有且仅有一个后继。
2、按存储空间分
(1)顺序表:内部存储空间连续近似可以看成数组
(2)链表:内部存储空间不连续。
3、顺序表内容
(1)头文件,存放在include 文件夹中
#ifndef _SQE_H_
#define _SQE_H_
#define IN_SIZE 10 //初始最大的空间
#define ADD_SIZE 5 //每次增加的空间
typedef enum{TRUE,FALST,ERROR} BOOL;
typedef int Data;
typedef struct _sqe
{
Data *pData; //顺序表的存储空间
int MaxSize; //最大的存储空间
int Size; //当前使用的存储空间
}Sqe;
//创建顺序表
Sqe *Creat();
//扩展顺序表,为其重新分配空间
BOOL AgainMalloc(Sqe *s);
//插入顺序表:尾插
//s:要插入的顺序表
//data:要插入的数据
//返回值:成功返回TURE,失败返回FALSE,其他返回ERROR
BOOL inster_last(Sqe *s,Data data);
// 插入数据:头插
// s:要插入的顺序表
// data:要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL inster_head(Sqe* s, Data data);
// 插入数据:根据位置插入数据
// s :要插入的顺序表
// index: 要插入位置的下标
// data :要插入的数据
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL inster_pos(Sqe* s, int index, Data data);
// 删除数据:根据位置删除数据
// s :要删除的顺序表
// index: 要删除位置的下标
// 返回值:成功返回 TRUE,失败返回FALSE,其他返回ERROR
BOOL Delete_pos(Sqe* s, int index);
//删除顺序表
void Destroy(Sqe *s);
//打印顺序表
void Display(Sqe* s);
#endif
(2)功能函数,存在在src文件夹中
#include "sqe.h"
#include <stdlib.h>
#include <stdio.h>
Sqe *Creat() //创建
{
Sqe *s = (Sqe *)malloc(sizeof(Sqe)/sizeof(char));
if(NULL == s)
{
return NULL;
}
s->pData=(Data *)malloc(sizeof(Data)/sizeof(char)*IN_SIZE);
if(NULL == s->pData )
{
free(s);
return NULL;
}
s->MaxSize = IN_SIZE;
s->Size = 0;
return s;
}
BOOL AgainMalloc(Sqe *s) //扩展
{
if(NULL == s)
{
return ERROR;
}
Data newsize = (sizeof(Data)/sizeof(char)*(s->MaxSize + ADD_SIZE));
Data *pa=(Data *)realloc(s->pData,newsize);
if(NULL == pa)
{
return FALST;
}
s->pData = pa;
s->MaxSize += ADD_SIZE;
return TRUE;
}
BOOL inster_last(Sqe *s,Data data) //插入:尾插
{
if(NULL == s)
{
return ERROR;
}
if(s->Size == s->MaxSize)
{
if(AgainMalloc(s) != TRUE)
return FALST;
}
s->pData[s->Size++] = data;
return TRUE;
}
BOOL inster_head(Sqe* s, Data data) //头插
{
if(NULL == s)
{
return ERROR;
}
if(s->Size == s->MaxSize)
{
if(AgainMalloc(s) != TRUE)
return FALST;
}
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 inster_pos(Sqe* s, int index, Data data) //按index插入
{
if(NULL == s || index < 0 || index > s->Size)
{
return ERROR;
}
if(s->Size == s->MaxSize)
{
if(AgainMalloc(s) != TRUE)
return FALST;
}
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(Sqe* s, int index) //按index删除
{
if(NULL == s || index < 0 || index >= s->Size)
{
return ERROR;
}
int i;
for(i = index; i < s->Size; i++ )
{
s->pData[i] = s->pData[i+1];
}
s->Size--;
return TRUE;
}
void Destroy(Sqe *s) //删除顺序表
{
if(NULL == s)
{
return;
}
free(s->pData);
free(s);
}
void Display(Sqe* s) //打印Data数组中的内容
{
if (NULL == s)
{
return;
}
int i;
for (i = 0; i < s->Size; i++)
{
printf ("%-4d", s->pData[i]);
}
printf ("\n");
}
(3)主函数,存在在src文件夹中
#include <stdio.h>
#include "sqe.h"
int main()
{
int i;
Sqe *s =Creat();
if(NULL == s)
{
printf("创建顺序表失败\n");
}
printf("创建顺序表成功\n");
for(i = 0;i < 18;i++)
{
inster_head(s,i);
}
Display(s);
inster_pos(s, 0, 666);
Display(s);
inster_pos(s, s->Size, 999);
Display(s);
inster_pos(s, 7, 233);
Display(s);
Delete_pos(s, 7);
Display(s);
Delete_pos(s, s->Size-1);
Display(s);
Delete_pos(s, 0);
Display(s);
Destroy(s);
return 0;
}