• 线性表


    线性表的基本操作:

    VS2010

    #include <stdio.h>
    #include <malloc.h>
    #include <system_error>
    
    typedef struct 
    {
        int * elem;
        int Length;
        int Listsize;
    }LinerList;
    
    ///初始化一个线性表 length:线性表长度
    void InitList(LinerList & L,int length)
    {
        if (length<0)
        {
            exit(-1);
        }
        L.elem=(int *)malloc(length*sizeof(int));
        if (!L.elem)
        {
            exit(-1);
        }
        L.Length=0;
        L.Listsize=length;
    }
    
    ///插入元素,e:插入的元素,p:插入的位置
    void InsertElem(LinerList & L,int e,int p)
    {
        if (!L.elem||p<0)
        {
            exit(-1);
        }
        if (p>L.Length+1)
        {
            int *newelem=(int *)realloc(L.elem,(10+L.Length)*sizeof(int));
            if (!newelem)
            {
                exit(-1);
            }
            L.Listsize+=10;
        }
        for (int *m=&L.elem[L.Length-1];m>=&L.elem[p-1];m--)
        {
            *(m+1)=*m;
        }
        L.elem[p-1]=e;
        L.Length++;
    }
    
    ///删除元素,p:元素位置
    void DeleteElem(LinerList & L,int p) { if (!L.elem||p<0||p>L.Length) { exit(-1); } int *t=&L.elem[p-1]; for (int *m=&L.elem[p-1];m<&L.elem[L.Length];m++) { *m=*(m+1); } L.Length--; } ///判断元素e是否存在于线性表中 int ExistElem(LinerList &L,int e) { if (!L.elem) { exit(-1); } int temp=0; for (int *m=L.elem;m<&L.elem[L.Length];m++) { if (*m==e) { temp=0; break; } else { temp=1; } } return temp; } ///将Lb中不在线性表La中的元素插入到La中 void MergeList(LinerList &La,LinerList &Lb) { if (!La.elem||!Lb.elem) { exit(-1); } for (int *m=Lb.elem;m<&Lb.elem[Lb.Length];m++) { if (ExistElem(La,*m)==1) { InsertElem(La,*m,La.Length+1); } } }
    ///简单的冒泡排序
    void Sort(LinerList &L) { if (!L.elem) { exit(-1); } for (int *m=L.elem;m<&L.elem[L.Length];m++) { for (int *n=m;n<&L.elem[L.Length];n++) { if (*m>*n) { int temp=*m; *m=*n; *n=temp; } } } }
    ///快速排序,第一次排序
    int QuickSort(LinerList &L,int i,int j) { if (!L.elem) { exit(-1); } int k=L.elem[i]; while(i<j) { while(i<j&&L.elem[j]>=k) { --j; } int temp=L.elem[j]; L.elem[j]=L.elem[i]; L.elem[i]=temp; while(i<j&&L.elem[i]<=k) ++i; temp=L.elem[i]; L.elem[i]=L.elem[j]; L.elem[j]=temp; } return i; }
    ///快速排序全过程,有点简单,只是实现了基本的排序功能
    void QSort(LinerList &L,int low,int high) { if (!L.elem) { exit(-1); } if(low<high) { int pivotloc=QuickSort(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); } } ///Print the exist linerlist; void PrintList(LinerList & L) { if (!L.elem) { exit(-1); } printf("LinerList Elements are : \n"); for (int *m=L.elem;m<&L.elem[L.Length];m++) { printf("%d ",*m); } printf("\n"); puts("LinerList Length is :\0"); printf("%d \n",L.Length); puts("LinerList ListSize is :\0"); printf("%d \n",L.Listsize); } void main() { LinerList La; InitList(La,100); InsertElem(La,27,1); InsertElem(La,13,1); InsertElem(La,76,1); InsertElem(La,97,1); InsertElem(La,65,1); InsertElem(La,38,1); InsertElem(La,45,1); PrintList(La); QSort(La,0,La.Length); PrintList(La); getchar(); }
  • 相关阅读:
    java的replace和replaceAll
    hibernate必须的包下载以及各个包的作用
    Jquery退出循环
    JQuery解析XML数据的几个例子
    使用ajax获取servelt数据乱码
    jquery绝对路径
    LeetCode 368. Largest Divisible Subset
    LeetCode 413. Arithmetic Slices
    LeetCode 474. Ones and Zeroes
    LeetCode 486. Predict the Winner
  • 原文地址:https://www.cnblogs.com/wuyihong/p/2676444.html
Copyright © 2020-2023  润新知