数据结构第一天

一、数据结构的组织形式

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;
}

二、 牛客网看的一些题

数据结构第一天数据结构第一天