一.数据结构三要素:
1,逻辑结构:线性和非线性
2,存储结构:顺序,链式,索引,散列
3,数据运算:算法
ps:具体时间复杂度与问题的规模和初始条件相关,分最佳和最大
二.线性表:
1.无头结点:
头插法:s->data=ch;s->next=head;head=s;
尾插法:rear->next=s;rear=s; (两个指针头尾指针)
删除:q=p->next;p->next=q->next;free(q);
2.有头结点:有了头结点后,对在第一个元素结点前插入结点和删除第一个结点,其操作与对其它结点的操作统一了。
头插法:s->data=ch;s->next=head->next;head->next=s;
尾插法:rear->next=s;rear=s; (两个指针头尾指针)
删除:q=p->next;p->next=q->next;free(q);
三.循环链表:
ps:单循环链表中设置尾指针比设置头指针更好
双循环链表:
前插:s->data=ch;s->prior=p->prior;s->next=p;p->prior->next=s;p->prior=s;
删除:p->prior->next=p->next;p->next->prior=p->prior;free(p);
四.栈:
顺序栈:(栈顶插入和删除,栈底为0)
初始栈:s->top=-1;
进栈:s->top++;S->data[s->top]=x;
出栈:x=S[s->top];s->top--;
五.链栈:链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针
进栈:p->data=x;p->next=S->top;S->top=p;(先进后出)S的next指向前面
出栈:S->top=p->next;free(p);
入队:p->data=x;Q->rear->next=p;Q->rear=p;
出队:p=Q->front;Q->front=p->next;free(p);