顺序表算法库

/* *Copyright (c)2016,烟台大学计算机与控制工程学院

*All rights reserved.

*文件名称: 顺序表部分算法

*作 者:林志文

*完成日期:2016年9月22日

*版 本 号:v1.0 *

 

主函数:

#include
#include "lzw.h"
using namespace std;
int main()
{
 SqList *sq;
 ElemType x[6]={6,4,5,7,8,9};
 CreateList(sq,x,6);
 DispList(sq);
 return 0;
}

 

 

 函数声明:

 #ifndef LIST_H_INCLUDED
#define LIST_H_INCLUDED
#define MaxSize 50
typedef int ElemType;
typedef struct
{
 ElemType data[MaxSize];
 int length;
}SqList;
void CreateList(SqList *&L,ElemType a[],int n);//创建顺序表
void DispList(SqList *L);//输出顺序表
void InitList(SqList *&L);//初始化顺序表
void DestroyList(SqList *&L);//释放
bool ListEmpty(SqList *L);//判断是否为空
int ListLength(SqList *L);//获取长度
bool GetElem(SqList *L,int i,ElemType &e);//获取第 i个位置的值
int LocateElem(SqList *L, ElemType e); //获取 等于E的位置
bool ListInsert(SqList *&L, int i, ElemType e); //差入元素E到第i个位置
bool ListDelete(SqList *&L,int i,ElemType &e);//删除
void move1(SqList *&L);//以第一个元素为分界线,将所有小于它的元素移到该元素的前面,将所有大于它的元素移到该元素的后面
void move2(SqList *&L);//
void unionList(SqList LA,SqList LB,SqList &LC);//合并
#endif

 

 

函数体定义:

#include "lzw.h"
#include
using namespace std;
void CreateList(SqList *&L,ElemType a[],int n)
{
 int i;
 L=new SqList;
 for(i=0;i  {
  L->data[i]=a[i];
 }
 L->length=n;
}
void InitList(SqList *&L)
{
 L=new SqList;
 L->length=0;
}
void DestroyList(SqList *&L)
{
    free(L);
}
bool ListEmpty(SqList *L)
{   
 return(L->length==0);
}
int ListLength(SqList *L)
{  
 return(L->length);
}
void DispList(SqList *L)
{    int i;
if (ListEmpty(L))
return; 
for (i=0; ilength; i++) 
cout<data[i]< }
bool GetElem(SqList *L,int i,ElemType &e)
{    if (i<1 || i>L->length)     
return false;   
e=L->data[i-1];   
return true;
}
int LocateElem(SqList *L, ElemType e)
{    int i=0;   
while (ilength && L->data[i]!=e) 
i++;
if (i>=L->length)  
return 0;  
else      
return i+1;
}
bool ListInsert(SqList *&L, int i, ElemType e)
{    int j; 
if (i<1 || i>L->length+1)   
return false; 
i--;   //将逻辑序号转化为物理序号
for (j=L->length; j>i; j--)//元素后移  
L->data[j]=L->data[j-1];  
L->data[i]=e;//腾开的位置插入元素e
L->length++;//顺序表长度增1 
return true;//成功插入返回true}
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{    int j;
if (i<1 || i>L->length)  
return false; 
i--;  
e=L->data[i];
for (j=i; jlength-1; j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
void move1(SqList *&L)
{
 int i=0,j=L->length-1;  
 ElemType pivot=L->data[0];
 ElemType tmp;
 while (i  {      
  while (idata[j]>pivot)    
   j--;   
        while (idata[i]<=pivot)  
   i++;   
        if (i   {      
   tmp=L->data[i];  
   L->data[i]=L->data[j];
   L->data[j]=tmp;
  }   
 }
 tmp=L->data[0];  
 L->data[0]=L->data[j];  
 L->data[j]=tmp;  
 printf("i=%d\n",i);
}
void move2(SqList *&L)

 int i=0,j=L->length-1;
 ElemType pivot=L->data[0];
    while (i  {      
  while (j>i && L->data[j]>pivot)       
   j--;      
  L->data[i]=L->data[j];   
  i++;    
  while (idata[i]<=pivot)   
   i++;    
  L->data[j]=L->data[i]; 
  j--;  
 }    L->data[i]=pivot;  
 printf("i=%d\n",i);
}
void unionList(SqList *&LA,SqList *&LB,SqList *&LC)

 int lena,i;
   ElemType e;  
   InitList(LC);   //将LA的所有元素插入到LC中
   for (i=1; i<=ListLength(LA); i++)  
   {        GetElem(LA,i,e); 
            ListInsert(LC,i,e); 
   }    lena=ListLength(LA);    //将LB的所有元素插入到LC
   for (i=1; i<=ListLength(LB); i++)  
   {         GetElem(LB,i,e);     
      if (!LocateElem(LA,e))       
       ListInsert(LC,++lena,e);  
   }
}

 

 

 

你可能感兴趣的:(顺序表算法库)