zoukankan      html  css  js  c++  java
  • 数据结构-代码(自用)

    第二章:动态分配顺序表:

    #include <iostream>
    
    using namespace std;
    
    #define InitSize 10
    #define ElemType int
    
    typedef struct
    {
        ElemType *data;
        int MaxSize;    //表示当前最大长度
        int length;     //表示当前字符串长度
    } SeqList;
    
    /*
    * 初始化顺序表
    */
    void InitList(SeqList &L)
    {
        L.data=(ElemType *)malloc(sizeof(ElemType)*InitSize);
        L.length=0;
        L.MaxSize=InitSize;
    }
    
    /*
    *   求顺序表长度
    */
    int Length(SeqList &L)
    {
        return L.length;
    }
    
    /*
    *   查找顺序表元素
    */
    int LocateElem(SeqList L,ElemType e)
    {
        for(int i=0; i<L.length; i++)
        {
            if(e==L.data[i])
            {
                return i;
            }
        }
        return -1;
    }
    
    ElemType getElem(SeqList L,int i)
    {
        return L.data[i-1];
    }
    
    
    bool listInsert(SeqList &L,int i,ElemType e)
    {
        if(i<1||i>L.length+1||i>L.MaxSize)
        {
            return false;
        }
    
        //ElemType *p=L.data;
    
        for(int k=L.length; k>=i; k--)
        {
            L.data[k]=L.data[k-1];
        }
        L.data[i-1]=e;
        L.length++;
        return true;
    }
    
    void IncreaseSize(SeqList &L,int len)
    {
        int *p=L.data;
        L.data=(ElemType *)malloc(sizeof(ElemType)*(L.MaxSize+len));
        for(int i=0; i<L.MaxSize; i++)
        {
            L.data[i]=p[i];
        }
        L.MaxSize=L.MaxSize+len;
        free(p);
    }
    
    bool Empty(SeqList L)
    {
        if(L.length==0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    void Transpose(SeqList&L){
        for(int i=0;i<L.length/2;i++){
            ElemType temp=L.data[i];
            L.data[i]=L.data[L.length-i-1];
            L.data[L.length-i-1]=temp;
        }
    }
    
    void DeleteAllNum(SeqList&L,ElemType e){
        int num=0;
        for(int i=0;i<L.length;i++)
        {
            if(L.data[i]!=e)
            {
                L.data[num]=L.data[i];
                num++;
            }
        }
        L.length=num;
    }
    bool DeleteMinElm(SeqList&L,ElemType &e)
    {
        if(L.length<=0)
        {
            return false;
        }
        int pos=0;
        e=L.data[0];
        for(int i=0; i<L.length; i++)
        {
            if(e>L.data[i])
            {
                e=L.data[i];
                pos=i;
            }
        }
        L.data[pos]=L.data[L.length-1];
        L.length--;
        return true;
    }
    
    void PrintList(SeqList L)
    {
        for(int i=0; i<L.length; i++)
            cout<<L.data[i]<<endl;
    }
    
    void DestoryList(SeqList &L)
    {
        free(L.data);
    }
    int main()
    {
        SeqList L;
        InitList(L);
        IncreaseSize(L,5);
        listInsert(L,1,3);
        listInsert(L,1,3);
        listInsert(L,1,3);
        listInsert(L,1,45);
        PrintList(L);
        ElemType temp;
        DeleteAllNum(L,3);
        //Transpose(L);
        //DeleteMinElm(L,temp);
        PrintList(L);
        return 0;
    }

     第三章:栈与队列

    顺序栈

    #include <iostream>
    
    using namespace std;
    #define Maxsize 10      //栈中元素最大容量
    #define ElemType int
    typedef struct
    {
        ElemType data[Maxsize];     //静态数组存放元素
        int top;    //栈顶指针
    } SqStack;
    
    void InitStack(SqStack &S)
    {
        S.top=-1;
    }
    
    bool StackEmpty(SqStack S)
    {
        if(S.top==-1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    void Push(SqStack &S,ElemType X)
    {
        if(S.top<Maxsize)
        {
            S.data[++S.top]=X;
        }
        else
        {
            cout<<"栈溢出"<<endl;
        }
    }
    
    void Pop(SqStack &S,ElemType &X)
    {
        if(S.top>-1)
        {
            X=S.data[S.top--];
        }
        else
        {
    
            cout<<"已经到达栈底"<<endl;
        }
    }
    
    void GetTop(SqStack &S,ElemType &X)
    {
        if(S.top>-1)
        {
            X=S.data[S.top];
        }
        else
        {
    
            cout<<"栈已经空"<<endl;
        }
    }
    
    void Destory(SqStack &S)
    {
        S.top=-1;
    }
    
    int main()
    {
        SqStack S;
        InitStack(S);
        Push(S,6);
        int x,y;
        Pop(S,x);
        cout<<x<<","<<y<<endl;
        cout<<StackEmpty(S);
        return 0;
    }

     循环队列:

    #include <iostream>
    
    using namespace std;
    #define Maxsize 3
    #define ElemType int
    typedef struct
    {
        ElemType data[Maxsize];
        int front;
        int rear;
    } SeqQueue;
    
    void InitQueue(SeqQueue &Q)
    {
        Q.front=0;      //表示队头    出队
        Q.rear=0;       //表示队列尾     入队
    }
    
    /*判断队空*/
    bool QueueEmpty(SeqQueue Q)
    {
        if(Q.front==Q.rear)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    
    bool EnQueue(SeqQueue &Q,ElemType X)
    {
        if(Q.front==(Q.rear+1)%(Maxsize))     //留一个位置
        {
            cout<<"c出错了;"<<Q.front<<";"<<Q.rear<<endl;
            return false;
        }
        else
        {
            cout<<Q.front<<";"<<Q.rear<<endl;
            Q.data[Q.rear++]=X;
            return true;
        }
    
    }
    
    bool DeQueue(SeqQueue &Q,ElemType &X)
    {
        if(Q.rear==Q.front)
        {
            cout<<"队列为空"<<endl;
            return false;
        }
        else
        {
            X=Q.data[Q.front++];
            return true;
        }
    
    }
    
    bool GetHead(SeqQueue Q,ElemType &X)
    {
        if(Q.rear==Q.front)
        {
            return false;
        }
        else
        {
            X=Q.data[Q.front];
            return true;
        }
    }
    
    
    int main()
    {
        SeqQueue S;
        InitQueue(S);
        ElemType a,b,c;
    
        cout<<QueueEmpty(S);
        EnQueue(S,1);
        EnQueue(S,2);
        cout<<QueueEmpty(S);
        EnQueue(S,3);
        DeQueue(S,a);
        DeQueue(S,b);
        DeQueue(S,c);
        cout<<a<<b<<c;
        return 0;
    }

     括号匹配

    #include <iostream>
    
    using namespace std;
    #define MaxSize 10
    #define Elemtype char
    
    
    typedef struct
    {
        Elemtype data[MaxSize];
        int top;
    } SeqStack;
    
    void InitStack(SeqStack &S)
    {
        S.top=-1;
    }
    
    bool Push(SeqStack &S,Elemtype x)
    {
        if(S.top==MaxSize)
        {
            return false;
        }
        else
        {
            S.data[++S.top]=x;
            return true;
        }
    }
    
    bool Pop(SeqStack &S,Elemtype &x)
    {
        if(S.top==-1)
        {
            return false;
        }
        else
        {
            x=S.data[S.top--];
            return true;
        }
    }
    
    bool Gettop(SeqStack &S,Elemtype &x)
    {
        if(S.top==-1)
        {
            return false;
        }
        else
        {
            x=S.data[S.top];
            return true;
        }
    }
    
    bool StackEmpty(SeqStack S)
    {
        if(S.top==-1)
            return true;
        else
            return false;
    }
    
    bool bracketCheck(char str[],int length)
    {
        SeqStack S;
        InitStack(S);
        for(int i=0; i<length; i++)
        {
            if(str[i]=='('||str[i]=='{'||str[i]=='[')
                Push(S,str[i]);
            else
            {
                if(StackEmpty(S))
                    return false;
                char topElem;
                Pop(S,topElem);
                if(str[i]==')'&&topElem!='(')
                    return false;
                if(str[i]==']'&&topElem!='[')
                    return false;
                if(str[i]=='}'&&topElem!='{')
                    return false;
            }
        }
        return StackEmpty(S);
    }
    int main()
    {
        cout<<bracketCheck("({[]})",6)<<endl;
        return 0;
    }

     二叉树

    #include <iostream>
    
    using namespace std;
    #define ElemType char
    typedef struct BiTNode
    {
        ElemType data;
        struct BiTNode *lchild,*rchild;
    } BiTNode,*BiTree;
    
    
    //先序建立二叉树
    void CreateBTree(BiTree &S)
    {
        ElemType ch;
        cin>>ch;
        //如果输入为#,表示无结点
        if(ch=='#')
        {
            S=NULL;
        }
        else
        {
            S=(BiTNode*)malloc(sizeof(BiTNode));
            S->data=ch;
            cout<<S->data<<endl;
            CreateBTree(S->lchild);
            CreateBTree(S->rchild);
        }
    }
    
    void prePrint(BiTree S)
    {
        if(S!=NULL)
        {
            cout<<S->data;
            print(S->lchild);
            print(S->rchild);
        }
        else
        {
            return;
        }
    }
    
    int main()
    {
    
        //定义二叉树根
        BiTree root=NULL;
        //创建二叉树
        CreateBTree(root);
        //先序输出二叉树
        prePrint(root);
        return 0;
    }

     快速排序:

    分治思想,选择基准,分成大于基准的与小于基准的(进行元素交换),对于分成的俩队再递归调用

    #include <iostream>
    
    using namespace std;
    void QuickSort(int *array,int left,int right)
    {
        if(left>=right)
        {
            return;
        }
        else
        {
            int Base=array[left];
            int low=left;
            int high=right;
    
            while(low<high)
            {
                while(array[high]>=Base&&low<high)
                {
                    high--;
                }
                array[low]=array[high];
    
                while(array[low]<=Base&&low<high)
                {
                    low++;
                }
                array[high]=array[low];
    
            }
            array[low]=Base;
            QuickSort(array,left,low-1);
            QuickSort(array,low+1,right);
        }
    
    }
    
    int main()
    {
        int array[]= {2,5,8,9,1,5,6,2};
        QuickSort(array,0,7);
        for(int i=0; i<=7; i++)
            cout<<array[i];
        return 0;
    }

     插入排序:

    #include <iostream>
    
    using namespace std;
    
    #define Elemtype int
    
    void InsertSort(Elemtype A[],int n) //A表示待排序序列(下标从零开始)  n表示序列长度
    {
        int i,j,temp;
        for(i=1; i<n; i++)  //扫描未排序序列,i前面已经排序
        {
            if(A[i]<A[i-1]) //看是否小于已排序序列最大项目    123456[4]  //此时6最大
            {
                temp=A[i];
    
                for(j=i-1; j>=0&&temp<A[j]; j--)    //从已排序序列中 找合适位置插入,该算法具有稳定性
                {
                    A[j+1]=A[j];
                }
                A[j+1]=temp;     //循环完后还会执行j--
            }
        }
    }
    int main()
    {
        int a[]= {1,12,4,8,6,9,2,5,8,4,126,7,4,5,9,6,5,8,8,5,8,7,9,6,2};
    
        cout<<"排序前:";
        for(int i=0; i<(int)sizeof(a)/4; i++)
        {
            cout<<a[i]<<" ";
        }
        InsertSort(a,sizeof(a)/4);
        cout<<"
    排序后:";
        for(int i=0; i<(int)sizeof(a)/4; i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
        return 0;
    }

  • 相关阅读:
    让div 充满整个body GIS
    fortuneclient 学习 (客户端接受数据) GIS
    错误 1 error C1083: 无法打开包括文件:“QNetworkProxy”: No such file or directory GIS
    qt fortuneserver 例子学习 ( 给客户端发送消息) GIS
    new操作符(new operator) 和 new操作(operator new)的区别。 GIS
    qt 控件 GIS
    c++ 顺序容器 GIS
    将一个div 分成两列 也可以分成多列 GIS
    控件模板 1
    WPF简单写写。。。
  • 原文地址:https://www.cnblogs.com/handsometaoa/p/15001625.html
Copyright © 2011-2022 走看看