OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 开始【数据结构】 学习之路

共9条 1/1 1 跳转至

开始【数据结构】 学习之路

高工
2015-11-11 12:59:16    评分

刚刚在当当上买了本,清华大学的数据结构,严老师的很经典。

准备学习一下,顺便分享下光盘,百度分享:http://pan.baidu.com/s/1gd131HT


PS:谁有比较好的调试C的软件吗,打算逐个算法调试一遍。






关键词: 数据结构    

专家
2015-11-11 22:46:20    评分
2楼

好用的C语言调试软件

1、如果做上位机开发,还是用C++的方便,开发环境就用Visual C++;

2、如果做下位机开发,我强烈推荐IAR开发环境,可以单步调试及内存监视的。


专家
2015-11-18 18:24:58    评分
3楼
数据结构,晚上回去下载看看,谢谢分享

高工
2015-11-19 08:25:56    评分
4楼

高工
2015-11-19 08:26:30    评分
5楼

专家
2015-11-19 19:19:08    评分
6楼
很充实的内容,也很形象

专家
2015-11-19 20:25:26    评分
7楼

没有看明白这个图式啊~~



菜鸟
2015-11-23 12:48:24    评分
8楼
呵呵,这个是基础,必须学哦

高工
2015-11-23 13:39:41    评分
9楼
第一节 线性表

线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

变量和类型声明

#define LIST_INIT_SIZE 100 //线性表存储空间初始分配量

typedef unsigned int ELEM_TYPE;
typedef enum
{
NO = 0,
YES
}BOOOL;

typedef struct
{
ELEM_TYPE *base;	//存储空间基地址
unsigned int length;	//当前长度
unsigned int maxSize;	//当前已分配的存储容量( sizeof(elemtype))
}SQlist;

 





基本操作函数12个。

线性表基本操作

//空间扩展为原来的2倍,并由P指针所指向,原内容自动拷贝到P所指向的存储空间
void againMalloc(SQlist *L)
{
	ELEM_TYPE *p = (ELEM_TYPE *)realloc(L->base,2*L->maxSize*sizeof(ELEM_TYPE));
	if(!p)
	{
		return ;
	}
	L->base = p;//使list指向新线性空间
	L->maxSize = L->maxSize+L->maxSize;//把线性表空间大小修改为新长度
}

void initList(SQlist *L)
{
	L->base = (ELEM_TYPE *)malloc(LIST_INIT_SIZE*sizeof(ELEM_TYPE));
	L->length = 0;
	L->maxSize = LIST_INIT_SIZE;
}

void destroyList(SQlist *L)
{
	if(L->base != NULL)
	{
		free(L->base);
		L->length = 0;
		L->maxSize = 0;
	}
}

BOOOL listEmpty(SQlist *L)
{
	if(L->length == 0)
		return YES;
	else
		return NO;
	
}

unsigned int listLength(SQlist *L)
{
	return (L->length);
}

void getElem(SQlist *L,unsigned int i,unsigned int *e)
{
	if((i>=1)&&(i<=L->length))//前提,表非空+位置合法
	{
		*e = L->base[i-1];
	}
}

BOOOL locateElem(SQlist *L,unsigned int e)
{
	unsigned int i;
	for(i=0;ilength;i++)
	{
		if(L->base[i] ==e)
			break;
	}

	if(i!= L->length)
		return YES;
	else 
		return NO;
}

BOOOL nextElem(SQlist *L,unsigned int cur_e,unsigned int *next_e)
{
	unsigned int i=1;
	ELEM_TYPE *p = L->base;
	while((ilength)&&(*p != *next_e))
	{
		p++;
		i++;
	}

	if(i >= L->length)
	{
		*next_e = 0;
		return NO;
	}
	else
	{
		*next_e = *(++p);
		return YES;
	}
}

void listInsert(SQlist *L,unsigned int i,ELEM_TYPE e)
{
	unsigned int j;
	if((i>=1)&&(i<= L->length))
	{
		if(L->length == L->maxSize)
		{
			againMalloc(L);
		}
		for(j = L->length-1;j>=i-1;j--)
		{
			L->base[j+1] = L->base[j];
		}
		L->base[i-1] = e; 
		L->length+=1;
	}
	
}


void listDelete(SQlist *L,unsigned int i,ELEM_TYPE *e)
{
	unsigned int j;
	if((i>=1)&&(i<= L->length))
	{
		*e = L->base[i - 1];
		for(j = i;j<=L->length;j++)
		{
			L->base[j - 1] = L->base[j];
		}
	}
	
	
}

void listTraverse(SQlist *L)
{
	unsigned int i;
	for(i = 0;ilength;i++)
	{
		printf("%d",L->base[i]);
	}
	printf("/r/n");
}





共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]