您的位置:首页 > 其它

顺序表的应用举例(利用顺序表的基本运算,实现如果在顺序表A中出现的元素,在顺序表B中也出现,则将A中该元素删除)

2015-02-02 22:42 387 查看
利用顺序表的基本运算,实现如果在顺序表A中出现的元素,在顺序表B中也出现,则将A中该元素删除。

头文件:函数的声明

#include <stdio.h>

#define LISTSIZE 100

typedef int ElemType;
typedef struct
{
ElemType list[LISTSIZE];
int length;
}Seqlist;

void InitList(Seqlist *L);//初始化操作
int ListEmpty(Seqlist L);//判断线性表为空
int GetElem(Seqlist L,int i,ElemType *e);//用序号获取元素
int LocateElem(Seqlist L,ElemType e);//用内容获取元素
int InsertList(Seqlist *L,int i,ElemType e);//插入线性表
int DeleteList(Seqlist *L,int i,ElemType *e);//从线性表中删除
int ListLength(Seqlist L);//返回线性表元素个数
void ClearList(Seqlist *L);//清空线性表


函数的定义

#include "顺序表.h"

void InitList(Seqlist *L)//初始化操作
{
L->length = 0;
}
int ListEmpty(Seqlist L)//判断线性表为空
{
if(0 == L.length )
{
return 1;
}
else
{
return 0;
}
}
int GetElem(Seqlist L,int i,ElemType *e)//用序号获取元素
{
if(i < 1||i > L.length )
{
return -1;
}
*e = L.list[i-1];
return 1;
}
int LocateElem(Seqlist L,ElemType e)//用内容获取元素
{
int i;
for(i = 1;i < L.length+1 ;i++)
{
if(e == L.list[i-1])
{
return i;
}
}
return 0;
}
int InsertList(Seqlist *L,int i,ElemType e)//插入线性表
{
int j;
if(i < 1||i > L->length +1)
{
printf("插入位置不合适!\n");
return -1;
}
else if(L->length  >= LISTSIZE)
{
printf("顺序表已满,不能插入元素!\n");
return 0;
}
else
{
for(j = L->length ;j >= i;j--)
{
L->list[j] = L->list[j-1];
}
L->list[i-1] = e;
L->length = L->length +1;
return 1;
}
}
int DeleteList(Seqlist *L,int i,ElemType *e)//从线性表中删除
{
int j;
if(i < 1||i > L->length)
{
printf("删除位置不合适!\n");
return -1;
}
else if( 0 == L->length )
{
printf("顺序表已空,不能进行删除!\n");
return 0;
}
else
{
*e = L->list[i-1];
for(j = i;j < L->length ;j++)
{
L->list[j-1] = L->list[j];
}
L->length = L->length - 1;
return 1;
}
}
int ListLength(Seqlist L)//返回线性表元素个数
{
return L.length ;
}
void ClearList(Seqlist *L)//清空线性表
{
L->length = 0;
}


函数的功能实现

#include "顺序表.h"

void DelElem(Seqlist *A,Seqlist B);//删除A中出现的B的元素
int main(void)
{
int i,j,flag;
ElemType e;
Seqlist A,B;
InitList(&A);
InitList(&B);
for(i = 1;i < 11;i++)
{
if( 0 == InsertList(&A,i,i))
{
printf("位置不合法");
return 0;
}
}
for(i = 1,j = 1;j < 7;i += 2,j++)
{
if( 0 == InsertList(&B,j,i*2))
{
printf("位置不合法");
return 0;
}
}
printf("顺序表A中的元素:\n");
for(i = 1;i <= A.length ;i++)
{
flag = GetElem(A,i,&e);
if(1 == flag)
{
printf("%4d",e);
}
}
printf("\n");
printf("顺序表B中的元素:\n");
for(i = 1;i <= B.length ;i++)
{
flag = GetElem(B,i,&e);
if(1 == flag)
{
printf("%4d",e);
}
}
printf("\n");
printf("删除表A中出现B的元素后的结果:\n");
DelElem(&A,B);
for(i = 1;i <= A.length ;i++)
{
flag = GetElem(A,i,&e);
if(1 == flag)
{
printf("%4d",e);
}
}
printf("\n");
return 0;
}
void DelElem(Seqlist *A,Seqlist B)
{
int i,flag,pos;
ElemType e;
for(i = 1;i <= B.length ;i++)
{
flag = GetElem(B,i,&e);
if(1 == flag)
{
pos = LocateElem(*A,e);
if(pos > 0)
{
DeleteList(A,pos,&e);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐