1.线性表
顺序表
typedef struct node{
int data[1000];
int length;
}Sqlist;
int find(Sqlist L,int x){
int i=0;
for(i;i<L.length;i++){
if(x>L.data[i]) {
break;
}
}
return i;
}
int insert(Sqlist &L,int x){
int j;
j=find(L,x);
for(int i=L.length-1;i>=j;i--){
L.data[i+1]=L.data[i];
if(i==j){
L.data[i]=x;
}
}
L.length++;
}
int Binary_Search(int A[],int L,int R,int x){
int mid;
while(L<R){
mid=(L+R)/2;
if(x<=A[mid]){
R=mid;
}
else{
L=mid+1;
}
}
if(A[L]==x) return L;
else return -1;
}
链表
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode ;
void Reverse(LinkNode *L){
LinkNode *p=L->next,*r;
L->next=nullptr;
while(p){
r=p->next;
p->next=L->next;
L->next=p;
p=r;
}
}
2.栈和队列
3.串
KMP算法
- 求next数组
void get_next(SString T,int next[]){
int i=1;j=0;
int next[1]=0;
while(i<T.length){
if(j==0 || T.ch[i]==T.ch[j]){
i++;j++;
next[i]=j;
}
else{
j=next[j];
}
}
}
- KMP算法得出位置
int Index_KMP(SString S,SString T,int next[]){
int i=1,j=1;
while(i<=S.length&&j<=T.length)
{
if(j==0 || T.ch[i]==T.ch[j]){
i++;j++;
}
else{
j=next[j];
}
if(j>T.length){
return i-T.length;
}
else{
return 0;
}
}
4.树
二叉树
#include<iostream>
#include<cstdio>
using namespace std;
typedef struct BTNode{
int data;
struct BTNode *lchild,*rchild;
}BTNode;
void PreOrder(BTNode *root){
if(!root) return ;
cout<<root->data<<endl;
PreOrder(root->lchild);
PreOrder(root->rchild);
}
void InOrder(BTNode *root){
if(!root) return ;
PreOrder(root->lchild);
cout<<root->data<<endl;
PreOrder(root->rchild);
}
void PostOrder(BTNode *root){
if(!root) return ;
PreOrder(root->lchild);
PreOrder(root->rchild);
cout<<root->data<<endl;
}
并查集
void init(int s[]){
for(int i=0;i<SIZE;i++){
s[i]=-1;
}
}
int Find(int s[],int x){
while(s[x]>=0)
x=s[x];
return x;
}
void Union(int s[],int root1,int root2){
if(root1==root2) return ;
s[root2]=root1;
}
5.图
6.排序
void Qsort(int A[],int L,int R){
if(L>=R) return ;
int pivot,i=L,j=R;
pivot=A[L];
while(i<j){
while(i<j && A[j]>pivot) j--;
while(i<j && A[i]<=pivot) i++;
if(i<j) swap(A[i],A[j]);
}
swap(A[L],A[i]);
Qsort(A,L,i-1);
Qsort(A,i+1,R);
}