最终增加的数据元素算法操作如下
#include "stdio.h"
#define max 10 //这个列表所能承受的最多元素个数
typedef struct
{
//为了简化操作:数据元素简单认为是int类型
int data[max];
int length;//这个顺序表现有数据元素个数
}seqlist;
//增
bool listinsert(seqlist &l, int i, int a)//试图修改链表,所以要用引用,(链表,插入元素位置,插入元素)
{
if ( i>max || i< 0)//非正常插入
return 0;
for (int j = l.length; j >= i; j--)//从尾部查找位置,后一个等于前一个
{
l.data[j] = l.data[j - 1];
}
l.data[i - 1] = a;
l.length++;
return 1;
};
void showdata(seqlist l)
{
for (int i = 0;i< max;i++)
{
printf("seqlist.data[%d]=%d\n",i,l.data[i]);
};
printf("now,seqlist.length=%d\n", l.length);
}
int main()
{
seqlist seqlist1 = { {1,2},2};//实例-初始化
showdata(seqlist1);
//实现增
bool c=listinsert(seqlist1, 2, 3);//报错:非常量引用只能做左值
printf("%d", c);
showdata(seqlist1);
printf("hello\n");
return 0;
}
感谢:
https://blog.csdn.net/qq_42402648/article/details/109199029
1整形输出:
2浮点输出
3字符串输出
这个博客还有关于转义字符的使用(比如\n),可以仔细看看
【Python】print格式化输出_兔子爱读书的博客-CSDN博客_print输出格式
printf输出全格式(C语言)_柏源宜次的博客-CSDN博客_printf输出格式
print与printf的区别
简单来说:使用print()进行打印就行。
#include "stdio.h"
#define max 10 //这个列表所能承受的最多元素个数
typedef struct
{
//为了简化操作:数据元素简单认为是int类型
int data[max];
int length;//这个顺序表现有数据元素个数
}seqlist;
//增
bool listinsert(seqlist &l, int i, int a)//试图修改链表,所以要用引用,(链表,插入元素位置,插入元素)
{
printf("insert,%d,in,%d\n", a, i);
if ( i>max-1 || i< 0)//非正常插入
return 0;
for (int j = l.length; j >= i; j--)//从尾部查找位置,后一个等于前一个
{
l.data[j] = l.data[j - 1];
}
l.data[i - 1] = a;
l.length++;
return 1;
};
//删
bool listdel(seqlist& l, int i)//链表,位置
{
printf("del=%d\n", i);
if (i > max || i < 0)
return 0;
for (int j = i; j <= l.length - 1; j++)//从中间位置直接往后覆盖
{
l.data[j-1] = l.data[j ];//这一个位置上的数被下一个数覆盖了
};
l.data[l.length - 1] = 0;
l.length--;
return 1;
}
//改
bool changelist(seqlist& l, int i, int a)//(链表,修改元素位置,修改元素)
{
printf("change,%d,in,%d\n", a, i);
if (i > max || i < 0)//非正常插入
return 0;
for (int j = i - 1; j < l.length - 1; j++)//直接定位
{
l.data[j] = a;//覆盖这个位置上的数
};
return 1;
};
//查
void findlist(seqlist& l, int a)//(链表,查找元素)
{
int i = 0;
printf("now,find in list,%d,\n", a);
for (int j = 0; j <=l.length - 1; j++)//直接定位
{
if (l.data[j] == a)
{
i++;
printf("%d is finded in list.data[%d]\n",a,j);
}
};
printf("%d is count %d\n", a, i);
};
void showdata(seqlist l)
{
for (int i = 0;i< max;i++)
{
printf("seqlist.data[%d]=%d\n",i,l.data[i]);
};
printf("now,seqlist.length=%d\n", l.length);
}
int main()
{
seqlist seqlist1 = { {1,2,3},3};//实例-初始化
showdata(seqlist1);
//实现增
bool c=listinsert(seqlist1, 2, 3);//如果报错:非常量引用只能做左值,可能是自己定义错了
printf("%d\n", c);
showdata(seqlist1);
//实现删除
bool d = listdel(seqlist1, 2);
printf("%d\n", d);
showdata(seqlist1);
//实现改
bool e = changelist(seqlist1, 2 , 3);
printf("%d\n", e);
showdata(seqlist1);
//实现查找
findlist(seqlist1, 3);
printf("hello\n");
return 0;
}
最后还有一些空间,简单介绍一下为什么要开这个板块
最主要的原因是C++还有C学习理论太快了,以至于根基不稳,可以想象敲代码的时候还在考虑for是怎么循环的,尤其碰到:在VS2019c++文件中不能在main函数中定义其他函数了这种坑设定。c++知识掌握不牢,编译器某些问题不清楚,这就很折磨人;尤其是马上要刷leetcode,这明显不行,索性就开了这个板块,用数据结构来练手,希望能够提高自己的实际编码能力。