您的位置:首页 > 其它

链栈的操作

2017-12-04 21:17 134 查看
例1:完成Stack CreateStack(void)函数,该函数创建一个栈(空栈,带头结点),并返回栈指针。

Stack CreateStack()

{
Stack S; //定义一个栈指针
Node *p; //申请一个新节点
p=(Node*)malloc(sizeof(Node));

    p->next=S;

    S=p;
return S;

}

例2:完成void
MakeEmpty(Stack S);函数,该函数把链栈置空(释放数据结点空间,但不释放头结点),已知S是带头结点的链栈。

void
MakeEmpty(Stack S)

{
Stack p,q; //p为指向型指针,q为实际要释放的指针
p=S->next;
while(p)
{ //一个个注意释放节点。

q=p;

p=p->next;
free(q);
}
S->next=NULL;

}

例3:完成Stack
DisposeStack(Stack S)函数,该函数销毁链栈S,已知S是带头结点的链栈。

Stack
DisposeStack(Stack S)

{
Stack s;

while(S)
{
s=S->next;
free(s);
S=s;

return NULL;

}

例4:链栈的判空只要S->next==NULL则代表栈空。

例5:完成void
Push(Stack S,ElemType x)函数,该函数把数据x进栈,已知S是带头结点的链栈。

void
Push(Stack S,ElemType x)

{
Node *p;
p=(Node*)malloc(sizeof(Node));
if(p==NULL) //申请节点失败。
{
return ;
}
p->data=x;

p->next=S->next;
S->next=p;

}

例6:成void
Pop(Stack S)函数,该函数把链栈S栈顶元素出栈,如果S已空,则什么都不做。已知S是带头结点的链栈。

void
Pop(Stack S)

{
Node *p;
p=S->next;
if(p==NULL)
{
return; //考虑是一个空栈。
}

S->next=p->next;
free(p);

}

例7:完成ElemType
Top(Stack S)函数,该函数返回链栈S的栈顶数据,已知S是带头结点的链栈并且S非空。

ElemType
Top(Stack S)

{

return S->next->data;

}

例8:完成ElemType
TopAndPop(Stack S)函
94ed
数,该函数把返回链栈S栈顶数据并把栈顶数据出栈,已知S是带头结点的非空链栈。

ElemType
TopAndPop(Stack S)

{
ElemType x;
x=S->next->data;

    Stack p;

    p=S->next;

    S->next=p->next;

    free(p);

    return x;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: