/*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;
}
(顺序表)设计算法删除所有数字字符
最新推荐文章于 2024-03-13 16:12:38 发布