为什么栈数据结构没有首元结点呢?
而链表数据结构有?
我很懵,求大佬们帮忙解答!
大佬们帮忙解答拉!
帮忙解答了!终于凑够发帖数字了
栈可以有,首节点,也可以没有。关键看你是用线性表还是链表来存储的栈。
链表不一定有头结点,没有一样用的,而栈一般有栈底和栈顶:
头文件
#pragma once
#include <iostream>
using namespace std;
class stack //栈类
{
public:
stack();
~stack();
void clearstack(); //清空
int isempty(); //判空
int length(); //求长度
char gettop(); //取栈顶元素
int push(char e); //进栈
int pop(char *pe=NULL); //出栈
int traverse(); //遍历
protected:
char *base; //栈底指针
char *top; //栈顶指针
};
cpp文件:
#include "stack.h"
#define MAXSIZE 65536
stack::stack()
{
base = new char[MAXSIZE];//分配栈空间
top = base;//初始化栈顶
}
stack::~stack()
{
delete []base;
base = NULL;
}
void stack::clearstack()
{
top=base;
}
int stack::isempty()
{
return top==base?1:0;
}
int stack::length()
{
return (int)(top - base);
}
char stack::gettop()
{
int len = length();
return *(base+len-1);
}
int stack::push(char e)
{
if(top-base==MAXSIZE) return 0;//栈满无法入栈
*(top)=e; //元素入栈
top++; //移动栈顶指针
return 1;
}
int stack::pop(char *pe)
{
if(isempty()) return 0;//为空无法出栈
if(pe!=NULL) *pe = *(top);
top--;
return 1;
}
int stack::traverse()
{
if(isempty()) return 0;//为空无法遍历
char*p;
for (p=base;p<top;p++) cout<<*p<<endl;
return 1;
}