带头结点链栈的操作 (10 分)

本题要求实现带头链表的栈,写出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

答案如下:

Status Push(LinkList L, ElemType e)
{
	LinkList p;
	p = (LinkList)malloc(sizeof(LinkList));
	p->data = e;
	p->next = L->next;
	L->next = p;
}
Status Pop(LinkList L, ElemType *e)
{
	LinkList p;
	if (L->next == NULL)
	{
		return -1;
	}
	p = L->next;
	*e = p->data;
	L->next = p->next;
	free(p);
}
posted @ 2019-03-27 12:42  林彦豪  阅读(713)  评论(1)    收藏  举报