#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
struct stack{
int num;/* 栈中的数字 */
struct stack * next;/* 下一个结点 */
};
typedef struct stack * Stack;
/*创建一个栈的头结点,并反回该结点的指针*/
Stack Create()
{
Stack S = (Stack)malloc(sizeof(struct stack));
S->next = NULL;
return S;
}
/*判断栈是否为空*/
bool isempty(Stack S)
{
return S->next == NULL;
}
/*把number压入栈*/
void push(Stack S,int number)
{
Stack pnew = (Stack)malloc(sizeof(struct stack));/*申请一个新结点*/
pnew->num = number; /*把number放进新结点里*/
pnew->next = S->next;/*新结点的下一个结点指向堆栈S的下一个结点*/
S->next = pnew;/*把新结点接在堆栈S后,该新结点为栈顶的位置*/
}
/*删除并返回栈顶的元素*/
int pop(Stack S)
{
Stack pold;/*将要删除的结点,即栈顶位置*/
int number;
if(isempty(S))
{
printf("Empty stack!!");
return -1;
}
else
{
pold = S->next;
number = pold->num;
S->next = pold->next;/*S的下个结点指向 将要删除的结点的 下个结点*/
free(pold);
return number;
}
}
void print(Stack S)
{
S = S->next;
while(S!=NULL)
{
printf("%d ",S->num);
S = S->next;
}
printf("\n");
}
int main(void)
{
Stack S = Create();
int n,number;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%d",&number);
push(S,number);
}
print(S);
for(int i = 0; i < n; i++)
{
printf("%d\n",pop(S));
}
return 0;
}
栈的链表实现
最新推荐文章于 2024-07-28 09:54:39 发布