/*
copyright (t) 2017,烟台大学计算机学院
*All rights reserved.
*文件名称:1.cpp
*作者:邵雪源
*完成日期:2017年9月14日
*问题描述:删除元素在x,的所有元素,要求算法的时间按复杂度为o(n),空间复杂度为o(1)
*版本号:v1.0
*/
main.cpp
#include "list.h"
#include
void delnode1(SqList *&L,ElemType x)
{
int i;
ElemType e;
while((i=LocateElem(L,x))>0)
{
ListDelete(L, i, e);
}
}
//用main写测试代码
int main()
{
SqList *sq;
ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};
CreateList(sq, a, 10);
printf("删除前 ");
DispList(sq);
delnode1(sq, 7);
printf("删除后 ");
DispList(sq);
return 0;
}
list.h
#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);//用数组创建线性表
bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
void DispList(SqList *L);//输出线性表DispList(L)
bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)
int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED
#endif
list.cpp
#include
#include
#include "list.h"
//用数组创建线性表
void CreateList(SqList *&L, ElemType a[], int n)
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for (i=0; idata[i]=a[i];
L->length=n;
}
//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
//输出线性表DispList(L)
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;
for (i=0; ilength; i++)
printf("%d ",L->data[i]);
printf("\n");
}
//求某个数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i,ElemType &e)
{
if (i<1 || i>L->length) return false;
e=L->data[i-1];
return true;
}
//按元素值查找LocateElem(L,e)
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;
}
//删除数据元素ListDelete(L,i,e)
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if (i<1 || i>L->length) //参数错误时返回false
return false;
i--; //将顺序表逻辑序号转化为物理序号
e=L->data[i];
for (j=i; jlength-1; j++) //将data[i..n-1]元素前移
L->data[j]=L->data[j+1];
L->length--; //顺序表长度减1
return true; //成功删除返回true
}
解法二:
#include "list.h"
#include
void delnode2(SqList *&L,ElemType x)
{
int k=0,i; //k记录非x的元素个数
for (i=0; ilength; i++)
if (L->data[i]!=x)
{
L->data[k]=L->data[i];
k++;
}
L->length=k;
}
//用main写测试代码
int main()
{
SqList *sq;
ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};
CreateList(sq, a, 10);
printf("删除前 ");
DispList(sq);
delnode2(sq, 7);
printf("删除后 ");
DispList(sq);
return 0;
}