×

关于我们

顺序表sqlist.cpp

Very2 Very2 发表于2026-05-23 浏览310 评论0
//顺序表基本运算算法
#include <stdio.h>
#include <malloc.h>
#define MaxSize 50
typedef int ElemType; 
typedef struct 
{	ElemType data[MaxSize];		//存放顺序表元素
   	int length;					//存放顺序表的长度
} SqList;						//顺序表的类型
void CreateList(SqList *&L,ElemType a[],int n)
//建立顺序表
{
	L=(SqList *)malloc(sizeof(SqList));
	for (int i=0;i<n;i++)
		L->data[i]=a[i];
	L->length=n;
}
void InitList(SqList *&L)
{
	L=(SqList *)malloc(sizeof(SqList));	//分配存放线性表的空间
	L->length=0;
}
void DestroyList(SqList *&L)
{
	free(L);
}
bool ListEmpty(SqList *L)
{
	return(L->length==0);
}
int ListLength(SqList *L)
{
	return(L->length);
}
void DispList(SqList *L)
{
	for (int i=0;i<L->length;i++)
		printf("%d ",L->data[i]);
	printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)
{
	if (i<1 || i>L->length)
		return false;
	e=L->data[i-1];
	return true;
}
int LocateElem(SqList *L, ElemType e)
{
	int i=0;
	while (i<L->length && L->data[i]!=e) i++;
	if (i>=L->length)
		return 0;
	else
		return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
	if (i<1 || i>L->length+1 || L->length==MaxSize)
		return false;
	i--;						//将顺序表位序转化为elem下标
	for (j=L->length;j>i;j--) 	//将data[i]及后面元素后移一个位置
		L->data[j]=L->data[j-1];
	L->data[i]=e;
	L->length++;				//顺序表长度增1
	return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
	int j;
	if (i<1 || i>L->length)
		return false;
	i--;						//将顺序表位序转化为elem下标
	e=L->data[i];
	for (j=i;j<L->length-1;j++)	//将data[i]之后的元素前移一个位置
		L->data[j]=L->data[j+1];
	L->length--;				//顺序表长度减1
	return true;
}
高精度

关于我们

高精度

Very2 Very2 发表于2026-04-25 浏览546 评论0
#include<bits/stdc++.h>
using namespace std;
string s1,s2;		//字符串表示高精度数 
int a[210],b[210],c[210];	//转存至整数数组 
int main(){
	cin>>s1>>s2;		//输入加数1和加数2 
	int len1,len2;		//字符串长度 
	len1=s1.size();
	len2=s2.size();
	//逆序存储加数1至整数数组a
	for(int i=0;i<=len1-1;i++){
		a[i]=s1[len1-i-1]-'0';}
	//逆序存储加数2至整数数组b
	for(int i=0;i<=len2-1;i++){
		b[i]=s2[len2-i-1]-'0';}
	//取两个加数位数最大值len,是否满10进位用x表示
	int len,x=0; 
	len=max(len1,len2);
	//加数1和加数2,循环按位累加后转存至数组c,满10则进位1
	for(int i=0;i<=len-1;i++){ 
		c[i]=a[i]+b[i]+x;
		if(c[i]>=10){	//满10则进位1
			c[i]-=10;	//当前位减10 
			x=1;		//进位加1 
		}
		else x=0;}
	//如果循环结束后进位1(即最高位满10进1),则直接先输出1
	if(x==1){ 
		cout<<1;
		for(int i=len-1;i>=0;i--){	//逆序输出保存和的数组c 
			cout<<c[i]; }
	}
	else{	//如果最高位不满10进1 
	//先剔除数组c尾部连续的0(即作为和的结果头部连续的0)
		while(c[len-1]==0&&len-1>0){ 
			len--;}
		for(int i=len-1;i>=0;i--){	//逆序输出保存和的数组c 
			cout<<c[i]; }
	}
	return 0;
 }