天天看點

[ 1002 ] 考試筆記 資料結構 簡代碼與小小說

----012345--- 

----0123345---

/********

代碼

if(i<1||i>L->last+2)   printf("i的位置出界\n");return ;

if(L->last>=MAXSIZE-1) printf("連結清單已滿\n");return ;

       for(k=L->last;k>i-1;k--) L->elem[k+1]=L->elem[k];

       elem[i-1]=e;  L->last++;

       return ok;

********/

[H|NULL]   [data|next]

[H|&P1] [P1|&P2] [P2|NULL]

頭結點  首元結點

頭指針  p1=H->next;

*H=(Linklist)malloc(sizeof(Node));

(*L)->next=NULL;

頭插法

                     [H|&p1] [P1|&P2] [P2|NULL]

 s=(Node*)malloc(sizeof(Node)); [s|NULL]             

S->data=p;                      [p|NULL]                 

s->next=H->next;                [p|&p1]

H->next=p;           [H|&p] [p|&p1] [P1|&P2] [P2|NULL]

尾插法

                     [H|&p] [P|NULL]

s=(Node*)malloc(sizeof(Node));  [s|NULL]

S->data=c;                      [c|NULL]                 

p->next=s;           [H|&p] [P|&c  ] [c|NULL]

p=s;                        p↑      p↑s     

【棧】

typedef struct{SE elem[5];int top; }SK;

 【[0][1][2][3][4]】

 ↑             ↑

top 

進棧》》

S->top=SIZE-1 棧滿 eg:5-1=4;

因為top初始化為-1是以進棧先S->top++;

S->elem[S->top]=x;     雙重指向性;eg:top=2;【[0][1][x][3][4]】

出棧》》

 *x=S->elem[S->top]; 僅能由頂出(表達式來實作棧的功能)           

   *x指針指向原來top的位置,可x帶出其值(實際x還在機器的x處)

   top--;維護棧,才能展現棧的含義;

【隊列】

typedef struct  Node{ QE data;struct  Node *next;}LQNode;

typedef struct{LQNode *front;LQNode *rear; }LQ;

【[][][][]】?       【[f|*][r|*]】

Q->front=(LQNode *)malloc(sizeof(LQNode));   [e|*]  

if(Q->front!=NULL)

{                             

Q->rear=Q->front;        [ f|*  ][ r |* ]

Q->front->next=NULL;     [f|NULL]

return(T);

}

插入》》

N=(LQNode *)malloc(sizeof(LQNode)); [e|*]

if(N!=NULL)

N->data=x;                     [x| *  ]

N->next=NULL;                  [x|NULL]

Q->rear->next=N;           [f|NULL][ r | &x ] [x|NULL]

    Q->rear=N;                             r↑          r↑N

                         隊尾插入,隊頭出隊;(可以重新自己反定義?)

出隊》》                       [f|NULL][ r | &x ] [x|NULL]

p=Q->front->next;                      p↑        ↑p->next

Q->front->next=p->next;         [f|NULL]  [x|NULL]

*p= p->data

free(p);                              frree([ r | &x ]  )

串 string

全程為一串字元串;strings

順序表實作儲存

typedef struct{ char e[MAX];int len; }SS;

串插入  分很多情況   【----------】

                        【------[*****]-----】

                                   ↑ ↑ ↑ ↑

                                    丢掉的

串删除  往前移動 len--;

         for(i=p+l;i<s->len;i++)s->ch[i-l]=s.ch[i];s->len=s->len-l;

串判空 (s.len==0)?(return 1):(return 0);/*僅限于僞代碼筆記*/

串複制 for(i=0;i<len;i++)s.ch[i]=t.ch[i];s->len=t->len;

串比較  for(i=0;i<len;i++)if(s.ch[i]!=t.ch[i])return (s.ch[i]-t.ch[i]);

串長度  return s.len

串清空  s->len=0;