用线性链表实现栈的功能

来源:互联网 发布:4s移动3g网络设置方法 编辑:程序博客网 时间:2024/04/30 20:20

 

 

下面的图片是原理图:

第一个是执行stackcreate()函数之后的结果;

第二个是第一次执行stackpush(货物1);

第三个是第二次执行stackpush(货物2);

 

 

 

程序代码:

stacklink.h

#ifndef __STACKLINK_H__#define __STACKLINK_H__typedef int stackdata;typedef struct stack{stackdata data;struct stack *next;}stacknode;typedef struct{stacknode *top;int n;}stacklink;extern stacklink *stackcreate(void);   //创建栈extern void stackpush(stacklink *s, stackdata data);//入栈extern stackdata stackpop(stacklink *s);//出栈extern stackdata stackgettop(stacklink *s);//获取栈顶数据extern int stackempty(stacklink *s);//判断是否为空#endif


stacklinc.c

#include "stacklink.h"#include <stdlib.h>stacklink *stackcreate(void){stacklink *s = (stacklink *)malloc(sizeof(stacklink));s->top = (stacknode *)malloc(sizeof(stacknode));s->top->next = NULL;s->n = 0;return s;}void stackpush(stacklink *s, stackdata data){stacknode *temp = (stacknode *)malloc(sizeof(stacknode));temp->data = data;temp->next = s->top->next;s->top->next = temp;s->n++;}/*执行pop是采用的方法是:先保存s->top的值给temp,即temp指向stacknode1,然后依靠temp->next使s->top指向stacknode2,stacknode2的data即为要出栈的元素,然后将stacknode1释放,将stacknode2的data返回,此时stacknode2取代了stacknode1的地位,stacknode2的data成为了“无效数据”。*/stackdata stackpop(stacklink *s){stacknode *temp = s->top;s->top = s->top->next;free(temp);s->n--;return s->top->data;}stackdata stackgettop(stacklink *s){return s->top->next->data;}int stackempty(stacklink *s){return s->top->next==NULL;}

原创粉丝点击