带头结点链栈的操作

作者 黄复贤

单位 菏泽学院

本题要求实现带头链表的栈,写出Push 、Pop函数。

函数接口定义:

Status Push(LinkList L,ElemType e);

Status Pop(LinkList L,ElemType *e);

其中 Le 都是用户传入的参数。 L 是带头结点的头指针; e 是数据元素。
其中 LinkList定义如下:

typedef struct LNode
{
    ElemType data;
        struct LNode * next;    
}LNode,*LinkList;

裁判测试程序样例:

#include <malloc.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
        struct LNode * next;
}LNode,*LinkList;

Status InitList(LinkList *L);
Status List(LinkList L);
Status ListInsert(LinkList L,int i,ElemType e);
int main()
{

  LinkList L;
  int x;
  InitList(&L);
  Push(L,1);Push(L,2);Push(L,3);
  List(L);
  Pop(L,&x);
  printf(" %d\n",x);
  List(L);
  return 0;
}

/* 请在这里填写答案 */

输出样例:

在这里给出相应的输出。例如:

 3 2 1
 3
 2 1

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C程序如下:

Status Push(LinkList L,ElemType e){
    LinkList p = (LinkList)malloc(sizeof(LNode));
    //申请一个新结点,用于链接新入栈的数据
    p->data = e;//给新结点的数据域赋值
    p->next = L->next;//新结点的next域指向链表头结点的next域
    L->next = p;//类似于单链表的前插法
}

Status Pop(LinkList L,ElemType *e){
    *e = L->next->data;//保存并传回要出栈的数据
    LinkList p = L->next;//p指向要出栈的结点
    L->next = p->next;//L的next域指向要出栈结点的下一个结点
    free(p);//释放要出栈的结点
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
头结点链栈具体操作如下: 1. 初始化链栈:创建一个头结点,并将头结点的next指针指向NULL。 2. 入栈操作:在头结点后插入一个新节点,将新节点的数据域设置为要插入的元素,将新节点的next指针指向原来的第一个节点,然后将头结点的next指针指向新节点。 3. 出栈操作:将头结点的next指针指向的节点删除,并返回该节点的数据域作为出栈的元素。 4. 判断栈空:判断头结点的next指针是否为NULL,如果是则栈空,否则栈非空。 5. 销毁链栈:从头结点的next指针开始,依次释放每个节点的内存空间,最后释放头结点的内存空间。 不头结点链栈具体操作如下: 1. 初始化链栈:将链栈设置为NULL。 2. 入栈操作:如果链栈为空,特殊处理,创建一个新节点,并将新节点的数据域设置为要插入的元素,将新节点的next指针指向NULL,然后将链栈指向新节点;如果链栈不为空,创建一个新节点,并将新节点的数据域设置为链栈的数据域,将链栈的数据域设置为要插入的元素,将新节点的next指针指向链栈的next指针,然后将链栈的next指针指向新节点。 3. 出栈操作:将链栈指向的节点删除,并返回该节点的数据域作为出栈的元素。 4. 判断栈空:判断链栈是否为NULL,如果是则栈空,否则栈非空。 5. 销毁链栈:从链栈开始,依次释放每个节点的内存空间。 #### 引用[.reference_title] - *1* *2* *3* [使用C语言实现链栈头结点和不头结点)](https://blog.csdn.net/Keep_Trying_Go/article/details/126284714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值