(顺序表)设计算法删除所有数字字符

时间:2022-11-04 22:34:32
 
/*2. 一个顺序表中存放字符(只有数字字符和英文字符),
 编写算法删除所有的数字字符*/
#include<iostream>
using namespace std;

typedef char datatype;
const int maxsize = 100;

typedef struct 
{
	datatype data[maxsize];
	int n;
}sqlist; 

sqlist* InitList()
{
	sqlist *L=new sqlist;
	L->n=0;
	return L;
} 

int Length(sqlist * L)
{
	return L->n;
}

int Insert(sqlist * L, datatype x, int i)
{
	int j;
	if(L->n==maxsize)
	{
		cout<<"表满,不能插入!"<<endl;
		return -1;
	}
	if(i<1 || i>L->n+1)
	{
		cout<<"非法插入位置!"<<endl;
		return 0;
	}
	for(j=L->n ; j>=i ; j--)
	{
		L->data[j] = L->data[j-1];
	}
	L->data[i-1]=x;
	L->n++;
	return 1;
}
int Delete(sqlist * L , int i)
{//从顺序表中删除第i个位置上的结点
	int j;
	if(L->n==0)
	{ 
		cout<<"表空,不能删除!(下溢)\n";
		return -1;
	}
	if(i<1 || i>L->n)
	{
		cout<<"非法删除位置!\n";
		return 0;
	}
	for(j=i+1 ; j<=L->n ; j++)
		L->data[j-2] = L->data[j-1];
	L->n--;
	return 1;
}

void Display(sqlist * L)
{
	cout<<"线性表中的数据元素依次是 : ";
	int i;
	for(i=0;i<L->n;i++)
	{
		cout<<L->data[i]<<"  ";
	}
	cout<<endl<<endl;
}

int IsDigit(char c)
{
	if(c>='0' && c<='9')
		return 1;
	else
		return 0;
}
void DeleteDigit(sqlist * L)//删除顺序表中的数字字符方法1
{
	int i;
	for(i=0 ; i<L->n ; )
	{
		if( IsDigit(L->data[i]) )
			Delete(L,i+1);
		else
			i++;
	}
}

void DeleteDigit2(sqlist * L)//删除顺序表中的数字字符方法2
{
	int i,s;
	s=0;
	for(i=0;i<L->n;i++)
	{
		if( IsDigit(L->data[i]))
			s++;
		else if(s>0)
			L->data[i-s] = L->data[i];
	}
	L->n = L->n - s;
}
int main()
{
	cout<<"以下先验证 删除顺序表中的数字字符方法1"<<endl;
	sqlist * List = InitList();

	Insert(List,'a',1);
	Insert(List,'2',2);
	Insert(List,'3',3);
	Insert(List,'c',4);
	Insert(List,'s',5);
	Insert(List,'8',6);
	Insert(List,'6',7);
	Display(List);

	DeleteDigit(List);
	cout<<"删除数字字符后。"<<endl;
	Display(List);


	cout<<"以下验证 删除顺序表中的数字字符方法2"<<endl;
	sqlist * List2 = InitList();
	
	Insert(List2,'a',1);
	Insert(List2,'2',2);
	Insert(List2,'3',3);
	Insert(List2,'c',4);
	Insert(List2,'s',5);
	Insert(List2,'8',6);
	Insert(List2,'6',7);
	Display(List2);
	
	DeleteDigit(List2);	
	cout<<"删除数字字符后。"<<endl;
	Display(List2);
	return 0;
}