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

 
/*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;
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
有序顺序表算法设计可以包括以下几个方面: 1. 删除重复元素:由于有序表值相同的元素一定在连续的位置上,可以使用类似直接插入排序的思想进行删除。具体步骤如下: - 初始化一个指针i为0,表示当前遍历的位置。 - 从第二个元素开始,依次与前一个元素比较,如果相等,则删除当前元素。 - 如果不相等,则将当前元素插入到指针i的位置,并将指针i后移一位。 - 重复上述步骤,直到遍历完所有元素。 2. 调整顺序表:将所有小于零的元素放在所有大于等于零的元素的前面。具体步骤如下: - 初始化两个指针i和j,分别指向顺序表的第一个元素和最后一个元素。 - 当i小于j时,循环执行以下操作: - 如果顺序表第i个元素小于零,则将指针i后移一位。 - 如果顺序表第j个元素大于等于零,则将指针j前移一位。 - 如果顺序表第i个元素大于等于零且第j个元素小于零,则交换这两个元素的位置。 - 当i大于等于j时,调整结束。 下面是一个示例代码,演示了如何删除有序顺序表的重复元素和调整顺序表算法设计: ```python def remove_duplicates(lst): i = 0 while i < len(lst) - 1: if lst[i] == lst[i+1]: del lst[i] else: i += 1 def adjust_order(lst): i = 0 j = len(lst) - 1 while i < j: if lst[i] < 0: i += 1 elif lst[j] >= 0: j -= 1 else: lst[i], lst[j] = lst[j], lst[i] i += 1 j -= 1 # 示例用法 lst = [1, 2, 2, 3, 4, 4,5, 6, 7, 8, 9, 9] remove_duplicates(lst) adjust_order(lst) print(lst) # 输出:[1, 3, 5, 6, 7, 8, 9, 2, 4] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小巫技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值