下面这个是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)
{
/*将线性表>
/*******************************************************************************
函数名:ListEmpty(SeqList L)
函数功能:判断线性表是否为空
入口参数:顺序表传值操作
出口参数:
********************************************************************************/
int ListEmpty(SeqList L)
{
/*判断线性表是否为空,线性表为空则返回1,否则返回0*/
if(L.length==0)/*判断线性表的长度是否为0*/
return 1;/*当线性表为空时,返回1,否则返回0*/
else
return 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;
}
下面这个是主函数:
/*******************************************************************************
函数名:DeleteList(SeqList *L, int i, DataType *e)
函数功能:删除操作
入口参数:
出口参数:
********************************************************************************/
#include<stdio.h>/*包含输入输出头文件*/
//#define ListSize 100
//typedef int DataType;/*元素定义为整型*/
/*顺序表类型定义
typedef struct
{
DataType list[ListSize];
int length;
}SeqList; */
#include"SeqList.h"/*包含顺序表实现文件*/
/*******************************************************************************
函数名:DelElem(SeqList *A, SeqList B)
函数功能:删除A中那些和B中元素相同的元素
入口参数:
出口参数:
********************************************************************************/
void DelElem(SeqList *A, SeqList B)
{
int i,flag,pos;
DataType e;
for(i=0; i<=B.length; i++)
{
flag=GetElem(B,i,&e);//一次把B中的每个元素取出给e
if(flag==1)
{
pos=LocateElem(*A,e);/*在A中查找和B中取出的元素
e相等的元素*/
if(pos>0)
DeleteList(A, pos, &e);/*如果找到元素,将其从
A中删除*/
}
}
}
/*******************************************************************************
函数名:main()
函数功能:主函数
入口参数:
出口参数:
********************************************************************************/
void main()
{
int i,j,flag;
DataType e;
SeqList A,B;/*声明顺序表A和B*/
InitList(&A);/*初始化顺序表A*/
InitList(&B);/*初始化顺序表B*/
for(i=1; i<=10;i++)/*将1-10插入到顺序表A中*/
{
if(InsertList(&A, i, i)==0)
{
printf("位置不合法");
return;
}
}
for(i=1,j=1; j<=6; i=i+2,j++)/*插入顺序表B中6个数*/
{
if(InsertList(&B, j, i*2)==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的元素删除后A中的元素:\n");
DelElem(&A,B);
for(i=1; i<=A.length; i++)
{
flag=GetElem(A,i,&e);
if(flag==1)
printf("%4d",e);
}
printf("\n");
}
文章评论(0条评论)
登录后参与讨论