数据结构栈总结
if(!S.base)
exit(OVERFLOW);//存储分配失
S.top=S.base+S.stacksize;
S.stacksize+=STACK_INCREMENT;
}
*(S.top)++=e;
}
Status ListInser_Cir(CirLinkList L,int i,int e) //在i处插入元素e,算法-8
return OK;
}
同双向链表
求表的长度
int ListLength_Sq(SqList L) //返回L中数据元素个数
{
return L.length;
}
int ListLength_Link(LinkList L)//得到表的长度
{
int i=0;
LinkList p;
p=L->next;
while(p)
p->next=q->next;
q->next=p;
return OK;
}
Status ListInser_Dul(DulLinkList L,int i,int e) //在i处插入元素e,算法-8
{
int j=1;
DulLinkList p,q;
q=L;
if(i<1||i>(ListLength_Dul(L)+1))
{
if(L->next==NULL)
return OK;
return ERROR;
}
Status ListEmpty_Cir(CirLinkList L) //判断L表是否为空表
{
if(L->next==L)
return OK;
return ERROR;
}
Status ListEmpty_Dul(DulLinkList L) //判断L表是否为空表
同
尾插入法
无
Status InsLast_Link(LinkList &q,LinkList &p) //尾插入法
{
q->next=p;
q=p;
p->next=NULL;
return OK;
}
Status InsLast_Cir(CirLinkList &q,CirLinkList &p) //尾插入法
}
同双向链表
头插入法
无
Status InsFirst_Link(LinkList &L,LinkList &p) //头插入,算法-10
{
p->next=L->next;
L->next=p;
return OK;
}
Status InsFirst_Cir(CirLinkList &L,CirLinkList &p) //头插入,算法-10
};
typedef DulNode *DulLinkList;
同双向链表
初始化(Init)
void InitStack(SeqStack &S)//构造一个空栈S
{
S.top=-1; //top为下标
}
void InitStack(SqStack &S)//构造一个空栈S
{
if(!(S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))
return ERROR;
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;
return OK;
{
p->next=L->next;
L->next=p;
return OK;
}
Status InsFirst_Dul(DulLinkList &L,DulLinkList &p)
{
p->next=L->next;
p->prior=L;
L->next->prior=p;
L->next=p;
return OK;}
{
q->next=p;
q=p;
p->next=L;
return OK;
}
Status InsLast_Dul(DulLinkList &q,DulLinkList &p) //尾插入法
{
q->next=p;
p->pL;
return OK;
}
Status InsLast_Dul(DulLinkList &q,DulLinkList &p) //尾插入法
{
if(L->next==L&&L->prior=NULL)
return OK;
return ERROR;
}
Status ListEmpty_Dul(DulLinkList L) //判断L表是否为空表
{
int j=1;
CirLinkList p,q;
q=L;
if(i<1||i>(ListLength_Cir(L)+1))
return ERROR;
while(j<i&&q)
{
q=q->next;
j++;
}
p=(CirLinkList)malloc(sizeof(CirNode));
p->data=e;
{
int j=1;
if(i<1||i>ListLength_Cir(L))
return ERROR;
while(j<i)
{
L=L->next;
j++;
}
CirLinkList p;
p=L->next;
e=p->data;
L->next=p->next;
free(p);
return OK;
}
Status ListDelete_Dul(DulLinkList L,int i,int &e)//删除第i个元素,并用e返回,算法-9
{
q->next=p;
p->prior=q;
q=p;
p->next=L;
return OK;
}
删除相应序号的结点
Status ListDelete_Sq(SqList &L,int i,ElemType &e) //在顺序线性表L中删除第i个元素,并用e返回其值
{//算法2.5
int *p,*q;
if(i<1||i>L.length)
L->prior=NULL;
return OK;
}
Status InitList_Dul(DulLinkList &L) //构造一个空的头结点
{
L=(DulLinkList)malloc(sizeof(DulNode));
if(!L)
return ERROR;
L->next=L;
L->prior=L->next;
{
i++;
p=p->next;
}
return i;
}
int ListLength_Cir(CirLinkList L)//得到表的长度
{
int i=0;
CirLinkList p;
p=L->next;
while(p!=L)
{
i++;
p=p->next;
}
return i;
}
int ListLength_Dul(DulLinkList L)//得到表的长度
return OK;
}
插入元素
Status ListInsert_Sq(SqList &L,int i,ElemType e) //在顺序线性表L中第i个位置之前插入新的元素e
{//算法2.4
int *p,*q,*newbase;
if(i<1|| i>L.length+1)return ERROR; //i值不合法
数据结构
第3章栈与队列总结
栈
顺序栈
单链栈
循环链栈
双向链栈
双向循环链栈
数组
结构体
结构模型
#define MAXSIZE 10
typedef struct{
SElemTypeStack[MAXSIZE];
int top;
}SeqStack;
typedef struct{
SElemType *base;//在栈构造之前和销毁之后,base的值为NULL
return OK;
}
void Push(SqStack &S,SElemType e)//插入元素e为新的栈顶元素
{
if(S.top-S.base>=S.stacksize)//栈满,追加存储空间
{
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT*sizeof(SElemType)));