6-1 带头结点链栈的操作

6-1 带头结点链栈的操作

分数 15
作者 黄复贤
单位 菏泽学院
本题要求实现带头链表的栈,写出Push 、Pop函数。

函数接口定义:

Status Push(LinkList L,ElemType e);

Status Pop(LinkList L,ElemType *e);
其中 L 和 e 都是用户传入的参数。 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

解题思路

本题较为简单和教材一致,参考教材《数据结构》周桂红第一版即可。

代码实现

Status Push(LinkList L,ElemType e){
	LinkList node = (LinkList)malloc(sizeof(struct LNode));
	if (node==NULL)
		return ERROR;
	node->data = e;
	
	node->next = L->next;
	L->next = node;
	return OK;
}

Status Pop(LinkList L,ElemType *e){
	LinkList node;
	if(L->next==NULL)
		return ERROR;
	else
	{
		node = L->next;
		*e = node->data;
		L->next = node->next;
		free(node);
		return OK;
	}
}
posted @ 2022-12-02 22:35  蠢蛋快跑  阅读(779)  评论(0)    收藏  举报