数据结构:
第一个关于栈的小程序:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Node
{
int data;
struct Node *next;
}node,*pnode ;
typedef struct Stack
{
pnode top;
pnode bottom
}Stack,*pstack;
void init(pstack s)
{
s->top=(pnode)malloc(sizeof(node));
if(s->top==NULL)
{
printf("内存分配失败");
exit(-1);
}
else
{
s->bottom=s->top;//直接只这样写会有问题,还要将指针域清空
s->top->next=NULL;
}
}
void push(pstack s,int i)
{
pnode L=(pnode)malloc(sizeof(node));//建立一个新节点
L->data=i;
L->next=s->top;
s->top=L;
}
bool isEmpty(pstack s)
{
if(s->top==s->bottom)
return true;
else
return false;
}
bool pop(pstack L,int* e)//出栈一次,并把出栈的元素存到e中
{
pnode r=(pnode)malloc(sizeof(node));
if(isEmpty(L))
//exit(-1);
return false;
else
{
r=L->top;
L->top=L->top->next;
*e=r->data;
free(r);
r=NULL;
return true;
}
}
void traverse(pstack s)//遍历输出
{
pnode p=(pnode)malloc(sizeof(node));
p=s->top;
while(p!=s->bottom)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
Stack s;
int e;
init(&s);
push(&s,1);
push(&s,2);
push(&s,3);
push(&s,4);
traverse(&s);
pop(&s,&e);
printf("%d",e);
}
转载于:https://blog.51cto.com/liu168ad/1332560