这是一个关于数据结构栈的问题

为什么栈数据结构没有首元结点呢?
而链表数据结构有?
我很懵,求大佬们帮忙解答!
大佬们帮忙解答拉!
帮忙解答了!终于凑够发帖数字了

栈可以有,首节点,也可以没有。关键看你是用线性表还是链表来存储的栈。

链表不一定有头结点,没有一样用的,而栈一般有栈底和栈顶:
头文件

#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;
}