刚刚在当当上买了本,清华大学的数据结构,严老师的很经典。
准备学习一下,顺便分享下光盘,百度分享: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"); }
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |