第二章-线性表-顺序表(初始化、循环、插入、删除、查找、清空)
常见的定义和方法都在笔记本上
易错点:
1.插入、删除判断条件不熟悉,经常忘记
2.这六种创建struct、初始化、销毁、清空功能分不太清
3.里面如何表示,有些细节还不太清楚
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 9
#define OK 1
#define Size 5
typedef int ElemType;
typedef int Status;
typedef struct Table{
ElemType *head;
int length;
int size;
}table;
//初始化
table init_table();
//循环遍历数组
void forEach_table(table t);
//插入元素节点
table add_table(table t,int index,int val);
//删除元素节点
table del_table(table t,int index);
//查询元素节点
int find_table(table t,int val);
//清空线性表
table clear_table(table t);
int main() {
table t1= init_table();
for(int i=0;i<Size;i++){
t1.head[i]=i+1;
t1.length++;
}
//printf("t1.length====%d\n",t1.length);//t1.length表达的是head里元素有几个
//printf("t1.dizhi===%p\n",&t1.length);//&t1.length表达的是存储这个长度所在的地址
//TIPS: t1.head[t1.length]=t1.head[5],这里t1.length==5,只是一个数字,在顺序队列中,结构体中int了两个下标,当作所引用
//printf("%p\n",t1.head[t1.length]);
//printf("t1.head[5]====%p\n",t1.head[5]);
t1=add_table(t1,2,666);
t1=del_table(t1,3);
int findVal=find_table(t1,666);
// printf("%d\n",findVal);
t1=clear_table(t1);
forEach_table(t1);
return 0;
}
table init_table(){
table t;
t.head=(ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
if(!t.head)
exit(0);//申请内存不足,初始化失败
t.length=0;
t.size=MAXSIZE;
return t;
}
void forEach_table(table t){
if(!t.head)
exit(0);
for(int i=0;i<t.length;i++){
printf("%d ",t.head[i]);//取t.head各个元素的值
// printf("%p\n",&t.head[i]);//取t.head各个元素的地址,注意是t的,和上面的t1地址是不同的
}
}
table add_table(table t,int index,int val){
if(t.length>=t.size){
printf("顺序表已满");
exit(0);
}
if(index>t.length+1 || index<1){
printf("位置不合法");
exit(0);
}
//TIPS: 注意这里的判断关系
for(int i=t.length-1;i>=index-1;i--){
t.head[i+1]=t.head[i];
}
t.head[index-1]=val;
t.length++;
return t;
}
table del_table(table t,int index){
if(!t.head){
printf("空顺序表");
exit(0);
}
if(index>t.length || index<1){
printf("删除位置有问题");
}
for(int i=index;i<t.length;i++){
t.head[i-1]=t.head[i];
}
t.length--;
return t;
}
int find_table(table t,int val){
if(!t.head){
printf("空表");
exit(0);
}
for(int i=1;i<t.length;i++){
if(t.head[i-1]==val){
return i;
}
}
}
table clear_table(table t){
//TIPS: 这样设定后,只能表示t.length是不准的,为0,但是t.head中其他元素还是都在的
//还有销毁线性表也没有搞懂,最好横向对比这六种方法都如何初始化和销毁清空
t.length=0;
return t;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步