这里写目录标题
数据结构—顺序表的实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
typedef struct {
int *num; //假如这里是一个数组 你最好使用指针 来表示它
int length;
} Node;
//这个有点类似于数组 , 可以自由改变结构体内的数字并传出
int init(Node &n,int size) {
n.length= size;
n.num=(int*)malloc(sizeof(int));
if(!n.num) {
return false;
}
return 1;
}
void create(Node &n) {
int length, i=0;;
printf("你输入的顺序表的长度大小是多少:");
scanf("%d",&length);
n.length=length;
printf("请输入你要输入的数字:");
for(; i<length; i++) {
scanf("%d",&n.num[i]);
}
}
void travel(Node &n) {
int i=0;
printf("我们遍历的顺序组是:");
for(; i<n.length; i++) {
printf("%2d ",n.num[i]);
}
printf("\n");
}
void update(Node &n,int number) { //按数值改变 注意名称是否会重复
int i=0,m;
for(; i<n.length; i++) {
if(n.num[i]==number) {
printf("输入你要改变的数值:");
scanf("%d",&m);
n.num[i]=m;
break;
}
}
}
void Delete(Node &n,int number) { //不能使用标识符
int i=0,j,m,ret=0;
for(; i<n.length; i++) {
if(n.num[i]==number) {
m=i;
ret=1;
break;
}
}
if(ret)
{
for(j=m+1; j<n.length; j++) {
n.num[j-1]=n.num[j];
}
n.length--; //要考虑最后一位的情况 , 但是直接-- 的话就直接把最后一位删除了
}
else
{
printf("你输入的数字不对,删除失败\n");
}
}
int main() {
Node n1;
int n,m;
init(n1,10);
create(n1);
travel(n1);
printf("输入你要修改的数值:");
scanf("%d",&m);
update(n1,m);
travel(n1);
printf("输入你要删除的数值:");
scanf("%d",&n);
Delete(n1,n);
travel(n1);
printf("操作结束\n");
return 0;
}
这里我简单的实现了一个顺序表,写的很草,没有malloc,可以粗略的看看吧
遇到的问题有
1.Node &n Node n
一开始我写的是Node n , 后来发现这种写法是不行的
```javascript
printf("%d\n",n1);
printf("%d",&n1);
查看了下地址,我认为这里就是相当于一个读入的地址 一个没有读入地址
发现n1中的传值length无法写入
2.我开始写了删除函数是写的delete
原来这个是标识符 , 建议大家用规范写法DeleteNode(驼峰)这样的,不要像我一样犯低级错误
3. 删除后的length记得 length–
好处是假如你想删除最后一位就直接删除了
写的很草,就按照自己的感觉写了crud,目前就是初步实现还没有考虑到优化!