第二章-線性表-順序表(初始化、循環、插入、刪除、查找、清空)
常見的定義和方法都在筆記型電腦上
易錯點:
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;
}