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