郝斌先生のデータ構造の基本知識復習学習ノート


データ構造(ストレージ+オペレーション)
定義:現実に大量で複雑な問題を特定のデータ型と特定のストレージ構造でメインメモリ(メモリ)に保存し、それに基づいてある機能(削除・変更)を実現して実行する対応する操作をアルゴリズムと呼ぶ.
データ構造=個体の記憶+個体の関係の記憶アルゴリズム=記憶データに対する操作
測定アルゴリズムの標準1、時間複雑度大体プログラムが実行する回数、実行する時間ではありません
2、空間複雑度アルゴリズムの実行中に大体使用した最大メモリ
3、難易度
4、頑丈性
基本知識復習ポインタ
# include 
int main(void)
{
    int i=9;
    f(&i);
    printf("%d",f);    
}
void f(int * p)
{
    *p=100;
}

配列内のa[i]=*(a+i)=*(i+a)
# include 
# include 
void f(int **q)
{
        q=(int *)0xfffffff;
}
int main (void)
{
    int i=9;
    int *p=&i;
    printf("%p/n",p);
    f(&p);
    printf("%p/n",p);
    return 0;
}

構造体こうぞうたい:複合データ型ふくごうでーたがた
# include 
struct Student
{
    int sid;
    char name[20];
    int age;
};//     
int main(void)
{
    struct Student st={1000,"zhangsan",19};
    printf("%d %s %d
"
,st.sid,st.name,st.age); st.sid=999; //st.name="list";//error strcopy(st.name,"list"); st.age=19; printf("%d %s %d
"
,st.sid,st.name,st.age); return 0; }
# include 
struct Student
{
    int sid;
    char name[20];
    int age;
};//     
int main(void)
{
    struct Student st;
    struct Student *pst;
    pst=&st;
    pst->sid=99;//pst->sid   (*pst).sid   st.sid;
    return 0;
}

構造体変数は減算できませんが、互いに値を割り当てることができます.一般構造体変数と構造体ポインタ変数を関数として参照する問題
# include 
# include 
struct Student 
{
    int sid;
    char name[200];
    int age;
};//     
void f(struct Student * pst)
{
    (*pst).sid=99;
    strcopy(pst->name,"zhangsan");
    pst->age=19;
}
void g()
{
    printf("%d %s %d
"
,st.sid,st.name,st.age); } void g2(struct Student *pst) { printf("%d %s %d
"
,pst->sid,pst->name,pst->age); } int main (void) { struct Student st; f(&st); g(st); g2(&st) return 0; }

どうてきわりあて
# include 
# include 
int main (void)
{
    int a[5]={1,2,3,4,5};
     int len;
     printf("              :len=");
     scanf("%d",len);
    // int *pArr=(int *)malloc(sizeof(int)*len);
    // *pArr=4;//a[0]=4;
    // pArr[1]=10;//a[1]=10;
    for (int i=0;i<len;i++)
        scanf("%d",&pArr[i]);
    for (int i=0;i<len;i++)
       printf("%d",&pArr[i]);
        
  
     
     free(pArr);//    
     
    return 0;
    
}


# include 
# include 
int main (void)
{
    int a[5]={1,2,3,4,5};
     int len;
     printf("              :len=");
     scanf("%d",len);
    // int *pArr=(int *)malloc(sizeof(int)*len);
    // *pArr=4;//a[0]=4;
    // pArr[1]=10;//a[1]=10;
    for (int i=0;i<len;i++)
        scanf("%d",&pArr[i]);
    for (int i=0;i<len;i++)
       printf("%d",&pArr[i]);
        
  
     
     free(pArr);//    
     
    return 0;
    
}

***借りがあれば返すが、これ以上借りるのは難しくない.***【^(3)~】
関数間メモリの使用
#include 
int main(void)
{
    int i=10;
    
    i=f();
    printf("i=%d
"
,i); for(i=0;i<2000;++i) { f(); } return 0; } int f() { int j =20; return j; }

くりを一つあげる
#include 
#include 
int main(void)
{
    int *p;
    f(&p);
    ...
}
int f(int ** q)
{
    *q=(int*)malloc(4);
}
#include
#include
struct Student
{
    int sid;
    int age;
}
  
struct Student * CreateStudent()
  {
      struct Student *p=(struct Student *)malloc(sizeof(struct Student));
      p->sid=125;
      p->age=169;
      return p;
  }
void ShowStudent( struct Student *pst)
{
    printf("%d,%d",pst->sid,pst->age);
}

int main(void)
{
    struct Student *ps;
    ps=CreateStudent();
    ShowStudent(ps);
    return 0;
}