头文件:SeqList.h
/*******************************************************************************
文件名:SeqList.h
文件功能:顺序表的基本运算
********************************************************************************/
#define ListSize 100
typedef int DataType;/*定义元素类型为整型*/
/*顺序表类型定义*/
typedef struct
{
DataType list[ListSize];
int length;
}SeqList;
/*******************************************************************************
函数名:InitList(SeqList *L)
函数功能:线性表的初始化操作
入口参数:顺序表首地址
出口参数:
********************************************************************************/
void InitList(SeqList *L)
{
/*将线性表初始化为空的线性表只要把线性表的长度length置为
0*/
L->length=0;/*把线性表的长度置为0*/
}
/*******************************************************************************
函数名:GetElem(SeqList L, int i, DataType *e)
函数功能:按序号查找操作
入口参数:L ,i,e
出口参数:
********************************************************************************/
int GetElem(SeqList L, int i, DataType *e)
{
/*查找线性表中第i个元素,查找成功将改值返回给e,并返回
1表示成功,否则返回-1表示失败*/
if(i<1 || i>L.length)/*查找第i个元素之前,先判断该序号是否合法*/
return -1;
*e = L.list[i-1];/*将第i个元素的值赋给e*/
return 1;
}
/*******************************************************************************
函数名:LocateElem(SeqList L,DataType e)
函数功能:按内容查找操作
入口参数:
出口参数:
********************************************************************************/
int LocateElem(SeqList L,DataType e)
{
/*查找线性表中元素值为e的元素,查找成功将对应元素的序号
返回,否则返回0表示失败*/
int i;
for(i=0;i<L.length;i++)/*从第一个元素开始比较*/
if(L.list==e)
return i+1;
return 0;
}
/*******************************************************************************
函数名:InsertList(SeqList *L, int i, DataType e)
函数功能:插入操作
入口参数:
出口参数:
********************************************************************************/
int InsertList(SeqList *L, int i, DataType e)
{
/*在顺序表的第i个位置插入元素e,插入成功返回1,如果插入位置
不合法返回-1,顺序表满返回0*/
int j;
if(i<1 || i>L->length+1)/*在插入元素之前,判断插入位置是否合法*/
{
printf("插入位置i不合法!\n");
return -1;
}
else if(L->length >= ListSize)/*在插入元素之前判断顺序表是否
已经满,不能插入元素*/
{
printf("顺序表已满,不能插入元素。\n");
return 0;
}
else
{
for(j=L->length;j>=i;j--)/*将第i个位置以后的元素一次后移*/
L->list[j]=L->list[j-1];
L->list[i-1]=e;/*插入元素到第i个位置*/
L->length=L->length+1;/*将顺序表长增1*/
return 1;
}
}
/*******************************************************************************
函数名:DeleteList(SeqList *L, int i, DataType *e)
函数功能:删除操作
入口参数:
出口参数:
********************************************************************************/
int DeleteList(SeqList *L, int i, DataType *e)
{
int j;
if(L->length<=0)
{
printf("顺序表已经不能进行删除!\n");
return 0;
}
else if(i<1 || i>L->length)
{
printf("删除位置不合适!\n");
return -1;
}
else
{
*e=L->list[i-1];
for(j=i;j<=L->length-1;j++)
L->list[j-1]=L->list[j];
L->length=L->length-1;
return 1;
}
}
/*******************************************************************************
函数名:ListLength(SeqList L)
函数功能:返回线性表的长度操作
入口参数:
出口参数:
********************************************************************************/
int ListLength(SeqList L)
{
return L.length;
}
/*******************************************************************************
函数名:ClearList(SeqList *L)
函数功能:返回线性表的长度操作
入口参数:
出口参数:
********************************************************************************/
void ClearList(SeqList *L)
{
L->length=0;
}
主函数体:
#include<stdio.h>
#include"SeqList.h"
void MergeList(SeqList A, SeqList B,SeqList *C)
{
int i,j,k;
DataType e1,e2;
i=1;
j=1;
k=1;
while(i<=A.length && j<B.length)
{
GetElem(A, i, &e1);
GetElem(B, j, &e2);
if(e1<=e2)
{
InsertList(C, k, e1);
i++;
k++;
}
else
{
InsertList(C, k, e2);
j++;
k++;
}
}
while(i<=A.length)
{
GetElem(A, i, &e1);
InsertList(C, k, e1);
i++;
k++;
}
while(j<=B.length)
{
GetElem(B, j, &e2);
InsertList(C, i, e2);
j++;
k++;
}
C->length=A.length+B.length;
}
void main()
{
int i,flag;
DataType a[]={6,11,11,23};
DataType b[]={2,10,12,12,21};
DataType e;
SeqList A,B,C;/*声明顺序表A,B,C*/
InitList(&A);/*初始化顺序表A*/
InitList(&B);/*初始化顺序表B*/
InitList(&C);/*初始化顺序表C*/
for(i=1; i<=sizeof(a) / sizeof(a[0]); i++)
{
if ( InsertList( &A, i, a[i-1]) == 0 )
{
printf("位置不合法");
return;
}
}
for(i=1; i<=sizeof(b) / sizeof(b[0]); i++)
{
if(InsertList(&B, i, b[i-1])==0)
{
printf("位置不合法");
return;
}
}
printf("顺序表A中的元素:\n");
for(i=1; i<=A.length; i++)
{
flag=GetElem(A, i, &e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
printf("顺序表B中的元素:\n");
for(i=1; i<=B.length; i++)
{
flag=GetElem(B, i, &e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
printf("将在A中出现B的元素合并后C中的元素:\n");
MergeList(A,B,&C);
for(i=1; i<=C.length; i++)
{
flag=GetElem(C, i, &e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
}
文章评论(0条评论)
登录后参与讨论