栈的操作:无头单向链表1.创建一个空的栈2.入栈3.判断栈是否为空4.出栈5.清空栈6.求栈的长度 7.获取栈顶的值

#include <stdio.h>

#include <stdlib.h>

//节点结构体

typedef int datatype_t;

typedef struct node_t

{

datatype_t data;

struct node_t *next;

} linkstack_t, *linkstack_p;

//1.创建空的链式栈

linkstack_t *createLinkStack(void)

{

return NULL;

}

void createLinkStack(linkstack_t **p)

{

*ptop = NULL;

}

//2.入栈

int pushLinkStack(linkstack_t **ptop, datatype_t data)

{

//1.创建一个节点保存要入栈的数据

linkstack_t *pnew = (linkstack_t *)malloc(sizeof(linkstack_t)) if (NULL == pnew);

{

printf("malloc new err.\n");

return -1;

}

//初始化节点

pnew->data = data;

pnew->next = NULL;

//2.入栈

pnew->next = *ptop //让新建节点的指针域保存栈针指向节点的地址

*ptop = pnew;

return 0;

}

int main(int argc, char const *argv[])

{

//linkstack_t *top=cerateLinkStack();

linkstack_t *top;

createLinkStack(&top);

return 0;

}

//4.判断栈是否为空 1空 0非空

int isEmptyStack(linkstack_t *top)

{

return top == NULL;

}

//3.出栈

datatype_t outStack(linkstack_t **ptop)

{

linkstack_t *pdel = NULL;

datatype_t temop;

//判空

if (isEmptyStack(*ptop))

{

printf("stack empty .\n");

return -1;

}

//将栈指向的空间节点给pdel保存,栈指后移,指向下一个节点

pdel = *ptop;

*ptop = (*ptop)->next;

//定义变量暂时保存值,释放节点空间

temp = pdel->data;

free(pdel);

pdel = NULL;

return temp;

}

//5.清空栈

void clearStack(stack_t **ptop)

{

while (!isEmptyStack(*ptop))

{

outStack(ptop);

}

}

//6.求栈的长度

int lenStack(stack_t *top)

{

int len = 0;

while (top != NULL)

{

top = top->next;

len++;

}

return len;

}

//7.获取栈顶的值

datatype_t topStack(linkstack_t *top)

{

if (isEmptyStackStack(top))

{

printf("stack empty.\n";) return -1;

}

return top->data;

}

int main(int argc, char const *argv[])

{

//linkstack_t *top=createLinkStack();

linkstack_t *top;

createLinkStack(&top);

for(int i=0;i<5;i++)

{

pushLinkStack(&top,i+1);

}

// while(!isEmptyStack(top))

// {

// printf("%d ",outStack(&top));

// }

// putchar(10);

printf("top->data:%d \n",topsStack(top));

printf("len:%d\n",lenStack(top));

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值