数据逻辑结构分为线性结构与非线性结构,线性结构分为线性表,栈,队列,串,数组,广义表;非线性结构主要分为树形和图形
栈队列1只能插入表尾,删除表尾1.插在表尾,删除表头xianjin2.后进先出
2.先进先出3.例如十进制转换,检验括号是否匹配4.栈的数据类型定义:初始化、销毁、判断是否为空、栈的长度、获取栈顶元素、入栈、出栈5.顺序栈:top/stacksize/base栈空:top==base;栈满:top-base=stacksize5.队列的顺序表示:队空/队满/循环队列/入队/出队6.顺序栈的各种操作6.顺序队列各种操作7栈的链式表现串数组广义表内容受限的线性表,只能是字符串广义表元素可能也是广义表,递归定义子串/真子串/字符位置/子串位置串相等一维数组/二维数组表头/表尾/广义表长度/深度串的顺序存储:0号位置不用,带来简便/串的链式存储数组只能顺序存储,不能链式存储。二维存储以行序为主顺序,以列序为主顺序;三维数组按页存储串的模式匹配:BF算法/KMP算法(确定主串中子串第一次出现的位置)eg:搜索引擎/拼写检查/语言翻译/数据压缩eg:特殊矩阵压缩储存/对象矩阵/三角矩阵/对角矩阵/稀疏矩阵以上是我自己总结的一些表格,接下来写一些基础应用,操作以及基础应用的算法数组
关于栈
顺序栈顺序栈的初始化:s.base=newSElemType[MAXSIZE];if(!s.base)exit(OVERFLOW)S.top=S.base;S.stacksize=MAXSIZE;returnok;顺序栈是否为空:if(S.top==S.base){returnTRUE;elsereturnFALSE;}求顺序栈的长度:returnS.top-S.base清空顺序栈:if(S.base){S.top=S.base;}returnOK;销毁顺序栈:if(S.base){deleteS.base;S.stacksize=0;S.base=S.top=NULL}returnOK;顺序栈入栈:if(S.top-S.base==S.stacksize)returnERROR;*S.top=e;S.top++;returnOK;顺序栈的出栈:if(S.top==S.base)returnERROR;--S.top;e=*S.top;链栈链栈的初始化:S=NULL;returnOK;判断链栈是否为空if(s==NULL)returnTRUE;elsereturnFALSE;链zhan入栈p=newStackNode;p-data=e;p-next=s;s=p;returnok链栈出栈:if(s==NULL)returnERROR;e=s-data;p=s;s=s-next;deletep;取栈顶元素if(s!=NULL)returns-data
十进制转换:核心算法就是例如十进制转换成8进制,一直除8,得到余数,然后得到最先写。其实就是后进先出,利用了栈的思想;用js实现,一个函数即可搞定,但是要补充位数;为了体现这个思想,我们想想如何用c实现括号匹配的检验:把括号输进去,一个个进行检验,如果匹配了,弹出去,不匹配,继续压栈表达式求值:搞两个栈,一个是算符栈,一个是操作数栈递归工作栈
关于队列
循环队列队列的数组表示:QElemType*baseintfront;头指针intrear;尾指针队列的初始化:(因为数组固定了空间,如果队满了,就会从之前出去的队列中进去,好像一个循环一样,叫做循环队列)Q.base=newQElemType[MAXQSIZE]if(!Q.base)exit(OVERFLOW);Q.front=Q.rear=0;returnOK;球队列的长度:(循环队列,进去出来求当时的长度)return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;循环队列的入队:if(Q.rear+1)%MAXQSIZE==Q.front;returnERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXQSIZE;returnOK;循环队列出队:if(Q.front==Q.rear)returnERROR;e=Q.base[Q.front]Q.front=(Q.front+1)%MAXQSIZE;returnOK;取队头元素if(Q.front!=Q.rear)returnQ.base[Q.front]链队列初始化if(!Q.front)exit(OVERFLOW);Q.front-next=NULL;returnOK销毁队列while(Q.front){p=Q.front-next;free(Q.front);Q.front=p;}returnOK;将元素e入队if(!p)exit(OVERFLOW)p-data=ep-next=NULLQ.rear-next=p;Q.rear=p;returnOK链队列出列(?)if(Q.front==Q.rear)returnERROR;e=p-data;Q.front-next=p-next;if(Q.rear==p)Q.rear=Q.front;deletep;returnOK;求队头元素if(Q.front==Q.rear)returnERROR;e=Q.front-next-data;returnOK
关于串数组广义表明天再写吧。累了哈哈哈
小土豆请你不要吃啊爱我就给我点赞吧