zoukankan      html  css  js  c++  java
  • 线性表

    线性表的基本操作:

    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(); }
  • 相关阅读:
    管理之道
    散户炒股图
    Linux系统编程(37)—— socket编程之UDP服务器与客户端
    Linux系统编程(36)—— socket编程之UDP详解
    Linux系统编程(35)—— socket编程之TCP服务器的并发处理
    Linux系统编程(33)—— socket编程之TCP程序的错误处理
    Linux系统编程(34)—— socket编程之TCP服务器与客户端的交互
    Linux系统编程(32)—— socket编程之TCP服务器与客户端
    Linux系统编程(31)—— socket编程之TCP详解
    Linux系统编程(30)—— socket编程之TCP/IP协议
  • 原文地址:https://www.cnblogs.com/wuyihong/p/2676444.html
Copyright © 2011-2022 走看看