刚刚在当当上买了本,清华大学的数据结构,严老师的很经典。
准备学习一下,顺便分享下光盘,百度分享: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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 |