线性表

线性表的基本操作:

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(); }
posted @ 2012-09-08 11:46  honging  阅读(185)  评论(0编辑  收藏  举报