【数据结构】链栈_LinkStack

本文介绍了链栈(LinkStack)的定义、初始化、清空、判断空栈、获取栈长、获取栈顶元素、插入元素、删除元素以及遍历操作。通过C语言实现了链栈的基本功能,包括创建链栈、压栈、弹栈、遍历等,提供了完整的代码示例。
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status; 
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */


/* 链栈结构 */
typedef struct StackNode
{
        SElemType data;
        struct StackNode *next;
}StackNode,*LinkStackPtr;


typedef struct
{
        LinkStackPtr top;
        int count;
}LinkStack;

Status visit(SElemType c)
{
        printf("%d ",c);
        return OK;
}

/*  构造一个空栈S */
Status InitStack(LinkStack *S)
{ 
        S->top = (LinkStackPtr)malloc(sizeof(StackNode));
        if(!S->top)
                return ERROR;
        S->top=NULL;
        S->count=0;
        return OK;
}

/* 把S置为空栈 */
Status ClearStack(LinkStack *S)
{ 
        LinkStackPtr p,q;
        p=S->top;
        while(p)
        {  
                q=p;
                p=p->next;
         
在原有的代码基础上,添加 `Print_LinkStack` 函数。该函数的功能是依次打印 `top` 中的元素值,并且在打印结束时为空。可以通过不断调用 `Pop` 函数来实现这一功能。以下是添加 `Print_LinkStack` 函数后的完整代码: ```c #include <stdio.h> #include <iostream> #include <math.h> using namespace std; //的实现 //的存储结构 typedef struct Node { //结点的数据 int data; struct Node *next; } Node; typedef struct { //的数据 int cnt; Node* top; } LinkStack; //初始化 LinkStack Init() { LinkStack s; s.cnt = 0; s.top = (Node *)malloc(sizeof(Node)); s.top = NULL; return s; } //判断空 int IsEmpty(LinkStack s) { return s.cnt == 0; } //进 void Push(LinkStack *s, int e) { Node *p = (Node*)malloc(sizeof(Node)); p->data = e; p->next = s->top; s->top = p; s->cnt++; } //出 void Pop(LinkStack *s) { if (s->top == NULL) { printf("空~\n"); return; } Node *p; printf("%d ", s->top->data); p = s->top; s->top = s->top->next; free(p); s->cnt--; } // 依次打印top中的元素值且打印结束时空 void Print_LinkStack(LinkStack *s) { while (!IsEmpty(*s)) { Pop(s); } } int main() { LinkStack s = Init(); Push(&s, 1); Push(&s, 3); Push(&s, 5); Print_LinkStack(&s); return 0; } ``` 在上述代码中,`Print_LinkStack` 函数通过一个 `while` 循环,只要不为空,就不断调用 `Pop` 函数,从而实现依次打印中元素值并在打印结束时为空的功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值