数据结构基础学习笔记 part 1
2017-06-21 20:38
288 查看
顺序表
单链表
顺序栈
链栈
循环顺序队列
链队
9ae2
初始化 Status InitList(SqList &L) { L.elem=new ElemType[MAXSIZE]; if(!L.elem) exit(OVERFLOW); L.length=0; return 0; } 取值 Status GetElem(SqList L,int i,ElemType &e) { if(i<1 || i>L.length) return ERROR; e=L.elem[i-1]; return OK; } 查找(按值查找返回序号) int LocateElem(SqList L,ElemType e) { for(i=0;i<L.length;i++) if(L.elem[i]==e) return i+1; return 0; } 插入 Status ListInsert(SqList &L,int i,ElemType e) { if((i<1)||(i>L.length+1)) return ERROR; if(L.length==MAXSIZE) return ERROR; for(j=L.length-1; j>=i-1 ;j++) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e; ++L.length; return OK; } 删除 Status ListDelete(SqList &L,int i) { if((i<1) ||(i>L.length)) return ERROR; for(j=i;j<=L.length-1;j++) L.elem[j-1]=L.elem[j]; --L.length; return OK; }
单链表
初始化 Status InitList(LinkList &L) { L=new LNode; L->next=NULL; return OK; } 取值 Status GetElem(LinkList L,int i,ElemType &e) { p=L->next;j=1; while(p&&j<i) { p=p->next; ++j; } if(!p||j>i)return ERROR; e=p->data; return OK; } 依值查找 int *LocateElem(LinkList L,ElemType e) { p=L->next; while(p&&p->data!=e) p=p->next; return p; } 插入 Status ListInsert(LinkList &L,int i,ElemType e) { p=L;j=0; while(p&&(j<i-1)) { p=p->next;++j;} if(!p||j>i-1) return ERROR; s=new LNode; s->data=e; s->next=p->next; p->next=s; return OK; } 删除 Status ListDelete(LinkList &L,int i) { p=L;j=0; while((p->next)&&(j<i-1)) { p=p->next;++j;} if(!(p->next) || (j>i-1)) return ERROR; q=p->next; p->next=q->next; delete q; return OK; }
顺序栈
初始化 Status InitStack(SqStack &S) { S.base=new SElemType[MAXSIZE]; if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=MAXSIZE; return OK; } 入栈 Status Push(SqStack &S,SElemType e) { if(S.top-S.base==S.stacksize) return ERROR; *S.top++=e; return OK; } 出栈 Status Pop(SqStack &S,SElemType &e) { if(Stop==S.base) return ERROR; e=*--S.top; return OK; } 取栈顶元素 SElemType GetTop(SqStack S) { if(S.top!=S.base) return *(S.top-1); }
链栈
初始化 Status InitStack(LinkStack &S) { S=NULL; return OK; } 入栈 Status Push(LinkStack &S,SELemType e) { p=new StackNode; p->data=e; p->neat=S; S=p; return OK; } 出栈 Status Pop(LinkStack &S,SElemType &e) { if(S==NULL) return ERROR; e=S->data; p=S; S=S->next; delete p; return OK; } 取栈顶元素 SElemType GetTop(LinkStack S) { if(S!=NULL) return S->data; }
循环顺序队列
初始化 Status InitQueue(SqQueue &Q) { Q.base=new QElemType[MAXQSIZE]; if(!Q.base) exit(OVERFLOW); Q.front=Q.rear=0; return OK; } 求循环队列的长度 int QueueLength(SqQueue Q) { return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } 入队 Status EnQueue(SqQueue &Q,QElemType e) { if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXQSIZE; return OK; } 出队 Status DeQueue(SqQueue &Q,QElemType &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; return OK; } 取队头元素 SElemType GetHead(SqQueue Q) { if(Q.front!=Q.rear) return Q.base[Q.front]; }
链队
初始化 Status InitQueue(LinkQueue &Q) { Q.front=Q.rear=new QNode; Q.front->next=NULL; return OK; } 入队 Status EnQueue(LinkQueue &Q,QElemType e) { p=new QNode; p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; } 出队 Status DeQueue(LinkQueue &Q,QElemType &e) { if(Q.front==Q.rear) return ERROR; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; delete p; return OK; } 取队头元素 SElemType GetHead(LinkQueue Q) { if(Q.front!=Q.rear) return Q.front->next->data; }
9ae2
相关文章推荐
- 数据结构基础学习笔记 part 2
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 数据结构基础学习笔记一——尾递归
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
- 【算法学习笔记】08.数据结构基础 二叉树初步练习1
- C#基础学习笔记--数据类型,值类型,结构类型,枚举类型
- 深层次两张图解经典6大排序与6大基础数据结构——学完这些,妈妈再也不用担心我的排序算法与数据结构,学习笔记大放送
- 数据结构学习笔记一:数据结构基础
- 【算法学习笔记】12.数据结构基础 图的初步1
- 数据结构与算法基础学习笔记
- Java之数据结构基础、线性表、栈和队列、数组和字符串,树—学习笔记
- 【算法学习笔记】11.数据结构基础 二叉树初步练习4
- 【算法学习笔记】07.数据结构基础 链表 初步练习
- 【算法学习笔记】10.数据结构基础 二叉树初步练习3(遍历与递归复习)
- 【算法学习笔记】11.数据结构基础 二叉树初步练习4
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 从零开始系列-R语言基础学习笔记之二 数据结构(一)
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)