第二章-线性表-顺序表(初始化、循环、插入、删除、查找、清空)
常见的定义和方法都在笔记本上
易错点:
1.插入、删除判断条件不熟悉,经常忘记
2.这六种创建struct、初始化、销毁、清空功能分不太清
3.里面如何表示,有些细节还不太清楚
#include#include =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#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 ){ t1.head[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.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 ){ if(t.head[i-1]==val){ return i; } } } table clear_table(table t){ //TIPS: 这样设定后,只能表示t.length是不准的,为0,但是t.head中其他元素还是都在的 //还有销毁线性表也没有搞懂,最好横向对比这六种方法都如何初始化和销毁清空 t.length=0; return t; }