您的位置:首页 > 理论基础 > 数据结构算法

数据结构基础学习笔记 part 1

2017-06-21 20:38 288 查看
顺序表

初始化
Status InitList(SqList &L)
{
L.elem=new ElemType[MAXSIZE];
if(!L.elem) exit(OVERFLOW);
L.length=0;
return 0;
}

取值
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<1 || i>L.length)  return ERROR;
e=L.elem[i-1];
return OK;
}

查找(按值查找返回序号)
int LocateElem(SqList L,ElemType e)
{
for(i=0;i<L.length;i++)
if(L.elem[i]==e)  return i+1;
return 0;
}

插入
Status ListInsert(SqList &L,int i,ElemType e)
{
if((i<1)||(i>L.length+1))  return ERROR;
if(L.length==MAXSIZE)  return ERROR;
for(j=L.length-1; j>=i-1 ;j++)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}

删除
Status ListDelete(SqList &L,int i)
{
if((i<1) ||(i>L.length))  return ERROR;
for(j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
return OK;
}


单链表

初始化
Status InitList(LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}

取值
Status GetElem(LinkList L,int i,ElemType &e)
{
p=L->next;j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)return ERROR;
e=p->data;
return OK;
}

依值查找
int *LocateElem(LinkList L,ElemType e)
{
p=L->next;
while(p&&p->data!=e)
p=p->next;
return p;
}

插入
Status ListInsert(LinkList &L,int i,ElemType e)
{
p=L;j=0;
while(p&&(j<i-1))
{ p=p->next;++j;}
if(!p||j>i-1)  return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}

删除
Status ListDelete(LinkList &L,int i)
{
p=L;j=0;
while((p->next)&&(j<i-1))
{ p=p->next;++j;}
if(!(p->next) || (j>i-1)) return ERROR;
q=p->next;
p->next=q->next;
delete q;
return OK;
}


顺序栈

初始化
Status InitStack(SqStack &S)
{
S.base=new SElemType[MAXSIZE];
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}

入栈
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base==S.stacksize) return ERROR;
*S.top++=e;
return OK;
}

出栈
Status Pop(SqStack &S,SElemType &e)
{
if(Stop==S.base) return ERROR;
e=*--S.top;
return OK;
}

取栈顶元素
SElemType GetTop(SqStack S)
{
if(S.top!=S.base)
return *(S.top-1);
}


链栈

初始化
Status InitStack(LinkStack &S)
{
S=NULL;
return OK;
}

入栈
Status Push(LinkStack &S,SELemType e)
{
p=new StackNode;
p->data=e;
p->neat=S;
S=p;
return OK;
}

出栈
Status Pop(LinkStack &S,SElemType &e)
{
if(S==NULL) return ERROR;
e=S->data;
p=S;
S=S->next;
delete p;
return OK;
}

取栈顶元素
SElemType GetTop(LinkStack S)
{
if(S!=NULL)
return S->data;
}


循环顺序队列

初始化
Status InitQueue(SqQueue &Q)
{
Q.base=new QElemType[MAXQSIZE];
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}

求循环队列的长度
int QueueLength(SqQueue Q)
{
return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}

入队
Status EnQueue(SqQueue &Q,QElemType e)
{
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}

出队
Status DeQueue(SqQueue &Q,QElemType &e)
{
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}

取队头元素
SElemType GetHead(SqQueue Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}


链队

初始化
Status InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
}

入队
Status EnQueue(LinkQueue &Q,QElemType e)
{
p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}

出队
Status DeQueue(LinkQueue &Q,QElemType &e)
{
if(Q.front==Q.rear)  return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)  Q.rear=Q.front;
delete p;
return OK;
}

取队头元素
SElemType GetHead(LinkQueue Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}


9ae2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构
相关文章推荐