链栈的操作
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;
}
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;
}