----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
return(T);
}
队尾插入,队头出队;(可以重新自己反定义?)
出队》》 [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;