堆栈之链式实现

堆栈实现

  • 实际上是单链表实现,栈顶在链表头,PUSH和POP都在头操作。不可以在链表尾操作,因为链表尾无法找到上一个节点。
  • 优点:无需事先分配内存。

初始化

typedef struct SNode *Stack;
struct SNode
{
	int data;
	Stack next;
};

创建堆栈

Stack CreateStack()
{
	Stack s;
	s = (Stack)malloc(sizeof(struct SNode));
	s->next = NULL;
	return s;
}

检测非空

int IsEmpty(Stack S)
{
	return (S->next == NULL);
}

PUSH

  • 创建一个新的头结点,指向原头结点
void Push(int item, Stack S)
{
	Stack TmpCell;
	TmpCell = (Stack)malloc(sizeof(struct SNode));
	TmpCell->data = item;
	TmpCell->next = S->next;
	S->next = TmpCell;
	return;
}

POP

  • 创建一个指针指向原头结点,将第二个结点作为新的头结点,free原头结点
int Pop(Stack s)
{
	Stack FirstCell;
	int TopElem;
	if (IsEmpty(s))
	{
		cout << "The stack is empty";
		return NULL;
	}
	else {
		FirstCell = s->next;
		s->next = FirstCell->next;
		TopElem = FirstCell->data;
		free(FirstCell);
		return TopElem;
	}
}
posted @ 2017-10-03 19:11  范加索尔拉  阅读(159)  评论(0编辑  收藏  举报