T O P

[资源分享]     第二章-线性表-顺序表(初始化、循环、插入、删除、查找、清空)

  • By - 楼主

  • 2021-11-21 00:00:01
  • 常见的定义和方法都在笔记本上

    易错点:

    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; }

     

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册