知识整理:
1、malloc:在堆区中动态申请内存
2、calloc:在堆区中动态申请内存并清零
3、realloc:重新申请内存
4、free:释放内存
5、通过cppreference.com网站学习C语言编程知识
6、程序=算法+数据结构
7、数据结构=结构定义+结构操作
8、顺序表:线性表的顺序存储,如数组
代码展示:
#include<stdio.h>
#include<stdlib.h>
//线性表的顺序存储,实现增删功能
//结构体
typedef struct node{
int *data;
int size,cap;//元素数量、容量
}Node;
//初始化结构体
Node *init_Node(int x){
Node *p=(Node *)malloc(sizeof(Node));
p->data=(int *)malloc(sizeof(int)*x);
p->size=0;//元素数量为0
p->cap=x;//初始容量大小为传参x
return p;
}
//删除结构体
void delete_Node(Node *p){
free(p->data);//先释放该空间避免造成内存泄露风险
free(p);
}
//插入元素
int insert(Node *p,int ind,int x){//ind是待插入的位置
if(p->size<ind)
return 1;//插入的位置不合理
if(p->size==p->cap)//空间满了
p->data=(int *)realloc(p->data, sizeof(int)*p->cap);//扩容
for(int i=p->size-1;i>=ind;i--)
p->data[i+1]=p->data[i];
p->data[ind]=x;
p->size++;//元素加一
return 0;
}
//删除元素
int delete(Node *p,int ind){
if(p->size<=ind)
return 1;//删除位置不合理
for(int i=ind+1;i<p->size;i++)
p->data[i-1]=p->data[i];
p->size--;//元素减一
return 0;
}
//打印结点
void show(Node *p){
printf("容量:%d,元素个数:%d\n",p->cap,p->size);
for(int i=0;i<p->size;i++){
printf("%d ",p->data[i]);
}
printf("\n");
}
int main(){
int n,m;
printf("请输入增删操作总次数和结点初始容量: ");
scanf("%d%d",&n,&m);
Node *N=init_Node(m);//开一个初始容量为m的结点N
show(N);
for(int i=0;i<n;i++){
printf("**************************\n");
int j;
printf("请输入选择符(增:1;删:0): ");
scanf("%d",&j);
if(j==0){//删除元素
int ind;
printf("请输入删除元素的位置:");
scanf("%d",&ind);
if(delete(N,ind))
printf("删除位置不合理!\n");
}
if(j){//删除元素
int ind,x;
printf("请输入插入的元素和位置:");
scanf("%d%d",&x,&ind);
if(insert(N,ind,x))
printf("插入位置不合理!\n");
}
show(N);
}
delete_Node(N);
return 0;
}
运行结果示例:
请输入增删操作总次数和结点初始容量: 5 2
容量:2,元素个数:0
**************************
请输入选择符(增:1;删:0): 1
请输入插入的元素和位置:10 1
插入位置不合理!
容量:2,元素个数:0
**************************
请输入选择符(增:1;删:0): 1
请输入插入的元素和位置:10 0
容量:2,元素个数:1
10
**************************
请输入选择符(增:1;删:0): 1
请输入插入的元素和位置:8 0
容量:2,元素个数:2
8 10
**************************
请输入选择符(增:1;删:0): 1
请输入插入的元素和位置:9 1
容量:2,元素个数:3
8 9 10
**************************
请输入选择符(增:1;删:0): 0
请输入删除元素的位置:2
容量:2,元素个数:2
8 9