数据结构线性表总结
p=p->next;
}
returni;
}
判断是否为空表
Status ListEmpty_Sq(SqList L) //判断L表是否为空表
{
if(L.length==0)
returnTRUE;
else
returnFALSE;
}
Status ListEmpty_Link(LinkList L)//判断L表是否为空表
{
q=q->next;
j++;
}
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=q->next;
q->next=p;
return OK;
}
Status ListInser_Cir(CirLinkList L,inti,inte)//在i处插入元素e,算法-8
{
intj=1;
if(i<1||i>ListLength_Cir(L))
returnERROR;
while(j<i)
{
L=L->next;
j++;
}
CirLinkList p;
p=L->next;
e=p->data;
L->next=p->next;
free(p);
returnOK;
}
Status ListDelete_Dul(DulLinkList L,inti,int&e)//删除第i个元素,并用e返回,算法-9
L->prior=NULL;
return OK;
}
Status InitList_Dul(DulLinkList &L)//构造一个空的头结点
{
L=(DulLinkList)malloc(sizeof(DulNode));
if(!L)
returnERROR;
L->next=L;
L->prior=L->next;
{
intj=1;
if(i<1||i>ListLength_Link(L))
returnERROR;
while(j<=i)
{
L=L->next;
j++;
}
DulLinkList p,q;
p=L->next;
q=L->prior;
e=L->data;
q->next=p;
p->prior=q;
free(L);
{
int data;
struct DulNode *prior;
struct DulNode *next;
};
typedef DulNode *DulLinkList;
同双向链表
初始化(Init)
StatusInitList_Sq(SqList &L) //构造一个空的线性表L
{//算法2.3
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)));
{
i++;
p=p->next;
}
returni;
}
intListLength_Cir(CirLinkList L)//得到表的长度
{
inti=0;
CirLinkList p;
p=L->next;
while(p!=L)
{
i++;
p=p->next;
}
returni;
}
intListLength_Dul(DulLinkList L)//得到表的长度
{
p->next=L->next;
L->next=p;
returnOK;
}
Status InsFirst_Dul(DulLinkList &L,DulLinkList &p)
{
p->next=L->next;
p->prior=L;
L->next->prior=p;
L->next=p;
returnOK;}
q->next=p;
q=p;
p->next=L;
returnOK;
}
Status InsLast_Dul(DulLinkList &q,DulLinkList &p)//尾插入法
{
q->next=p;
p->prior=q;
q=p;
p->next=NULL;
returnOK;
}
Status InsLast_Dul(DulLinkList &q,DulLinkList &p)//尾插入法
{
intj=1;
CirLinkList p,q;
q=L;
if(i<1||i>(ListLength_Cir(L)+1))
returnERROR;
while(j<i&&q)
{
q=q->next;
j++;
}
p=(CirLinkList)malloc(sizeof(CirNode));
p->data=e;
数据结构
第2章线性表总结
表
顺序表
单项链表
循环链表
双向链表
双向循环链表
结构模型
typedef struct {
ElemType*elem;//存储空间的基址
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;
struct LNode
{
int data; //数据域
if(L.length>=L.listsize)
{//当前存储空间已满,增加分配
newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)//存储分配失败
exit(OVERFLOW);
p->next=q->next;
q->next=p;
returnOK;
}
Status ListInser_Dul(DulLinkList L,inti,inte)//在i处插入元素e,算法-8
{
intj=1;
DulLinkList p,q;
q=L;
if(i<1||i>(ListLength_Dul(L)+1))
return ERROR;//i值不合法
p=&(L.elem[i-1]);//p为被删除元素的位置
e=*p;
q=L.elem+L.length-1;//表尾的位置
for(++p;p<=q;++p)//被删除元素之后的元素左移
*(p-1)=*p;
--L.length;
return OK;
}
Status ListDelete_Link(LinkList L,inti,int&e)//删除第i个元素,并用e返回,算法-9
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
return ERROR;
L->next=NULL;
return OK;
}
Status InitList_Cir(CirLinkList &L) //构造一个空的头结点ห้องสมุดไป่ตู้
{
L=(CirLinkList)malloc(sizeof(CirNode));
同
尾插入法
无
Status InsLast_Link(LinkList &q,LinkList &p)//尾插入法
{
q->next=p;
q=p;
p->next=NULL;
returnOK;
}
Status InsLast_Cir(CirLinkList &q,CirLinkList &p)//尾插入法
{
Status GetElem_Sq(SqList L,int i,ElemType&e) //用e返回L中第i个数据元素的值
if(!L)
return ERROR;
L->next=L;
return OK;
}
Status InitList_Dul(DulLinkList &L) //构造一个空的头结点
{
L=(DulLinkList)malloc(sizeof(DulNode));
if(!L)
return ERROR;
L->next=L;
returnERROR;
while(j<i&&q)
{
q=q->next;
j++;
}
p=(DulLinkList)malloc(sizeof(DulNode));
p->data=e;
p->next=q->next;
p->prior=q;
q->next->prior=p;
q->next=p;
returnOK;
{
inti=0;