1.将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表。
2.双向链表:双向链表是在单链表的每个结点中,再设置一个指向前驱结点的指针域;
prior | data | next |
P
p->prior :P的前驱 p->data:p的数据域 p->next:p的指针域
typedef struct Du1Node
{
ElemType data;
struct DuLNode *prior; //直接前驱指针
struct DuLNode *next; //直接后继指针
} Du1Node,*DuLinkList;
3.栈的定义:限定仅在表尾进行插入和删除操作的线性表。
4.栈顶:允许插入和删除的一端。
5.栈底:不允许插入和删除的一端。
6.栈的输出原则:后进先出,栈的插入操叫作进栈,也叫作压栈;栈的删除操作叫作出栈,也叫作弹栈。
7.栈的接口如下表所示:
InitStack(*s) | 初始化操作,建立一个空栈S |
DestroyStack(*s) | 若栈存在,则销毁它 |
ClearStack(*s) | 将栈清空 |
EmptStack(s) | 若栈为空,返回true,否则返回false |
GetTop(s,*e) | 若栈存在且非空,用e返回s的栈顶元素 |
Push(*s,e) | 若栈存在且非空,插入新元素e到栈s中并成为栈顶元素 |
Pop(*s,e) | 删除栈s中栈顶元素,并用e返回其值 |
StackLength(s) | 返回栈s的元素个数 |
8.栈的结构体定义:
typedef int DataType;
struct stack {
DataType data[SIZE];
int top;
};
typedef struct stack Stack;