第一章 绪论
1.0数据结构在学什么

数据结构在学什么?
1.1数据结构的基本概念



1.2算法和算法评价




第二章 线性表
2.1线性表的定义和基本操作


2.2线性表的顺序表示



2.3顺序表的链式表示
单链表










双链表

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| typedef sturct dnode{ elemtype data; struct dnode *prior,*next; }dnode, *dlinklist;
bool initdlinklist(dlinklist &L){ L = (dnode *)malloc(sizeof(dnode)); if(L==NULL) return false; l->prior = NULL; L->next = NULL; return ture; } void testdlinklist(){ dlinklist L; initdlinklist(L);
bool empty(dlinklist L){ if(L->next == NULL) return true; else return false; }
bool insertnextdnode(dnode *p, dnode *s){ if(p==NULL || s==NULL) return false; s->next=p->next; if(p->next !=NULL) p->next->prior=s; s->prior=p; p->next=s; return ture; }
bool deletenextdnode(dnode *p){ if(p==NULL) return false; dnode *q = p->next; if(q==NULL) return false; p->next=q->next; if(q->next !=NULL) q->next->prior=p; free(q); return ture; }
|
循环链表
循环单链表:最后一个节点的指针指向第一个节点
循环双链表:表头节点的前驱指向表尾结点;表尾结点的后继指向头结点
静态链表
1 2 3 4 5 6 7
| #define maxsize 10 typedef struct node{ elemtype data; int next; }slinklist[maxsize],slist;
|
第三章 栈和队列
3.1栈的定义
栈:是只允许在一端进行插入或删除操作的线性表
栈顶:允许插入和删除的一方
栈底:不允许插入与删除的一方
栈的特点:先进后出
3.2栈的基本操作
InitStack(&S) : 初始化 栈。构造一个空栈 S , 分配内存空间 。
DestroyStack(&S) : 销毁 栈。销毁并 释放 栈 S 所占用的 内存空间 。
Push(&S,x) : 进栈 ,若栈 S 未满,则将 x 加入使之成为新栈顶。
Pop(&S,&x) : 出栈 ,若栈 S 非空,则弹出栈顶元素,并用 x 返回。
GetTop(S, &x) : 读栈顶元素 。若栈 S 非空,则用 x 返回栈顶元素
其他常用操作:
StackEmpty(S) :判断一个栈 S 是否为空。若 S 为空,则返回 true ,否则返回 false 。
顺序栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #define maxsize 10 typedef struct{ elemtype data[maxsize]; int top; }sqstack;
void initstack(sqstack &s){ s.top=-1; }
bool stackempty(sqstack s){ if(s.top==-1) return ture; else return false; }
bool push(sqstack &s, elemtype x){ if(s.top==maxsize-1) return false; s.top=s.top+1; s.data[s.top]=x; return ture; }
bool pop(sqstack &s,elemtype &x){ if(s.top==-1) return false; x=s.data[s.top--]; return ture; }
bool gettop(sqstack s,elemtype &x){ if(s.top==-1) return false; x=s.data[s.top]; return ture; }
|
共享栈
1 2 3 4 5 6 7 8 9 10 11 12 13
| #define maxsize 10 typedef struct{ elemtype data[maxsize]; int top0; int top1; }shstack
void initstack(shstack &s){ s.top0=-1; s.top1=maxsize; }
|
链栈
1 2 3 4 5
| typedef struct linknode{ elemtype data; struct linknode *next; } *listack;
|