刚刚在当当上买了本,清华大学的数据结构,严老师的很经典。
准备学习一下,顺便分享下光盘,百度分享:http://pan.baidu.com/s/1gd131HT
PS:谁有比较好的调试C的软件吗,打算逐个算法调试一遍。
线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。
线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。
变量和类型声明
#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"); }
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |