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

来源:互联网 发布:iphone照片无线导入mac 编辑:程序博客网 时间:2024/05/16 11:52
 /*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;elsereturn 0;}void DeleteDigit(sqlist * L)//删除顺序表中的数字字符方法1{int i;for(i=0 ; i<L->n ; ){if( IsDigit(L->data[i]) )Delete(L,i+1);elsei++;}}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;}

原创粉丝点击