C语言和C++实现Stack有什么区别?

03-29 阅读 0评论

C语言和C++实现Stack的对比,我们分别看看C语言实现的栈和c++实现的栈有什么区别

C语言和C++实现Stack有什么区别?,C语言和C++实现Stack有什么区别?,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,访问,第1张
(图片来源网络,侵删)
  1. C语言实现
    typedef int DataType;
    typedef struct Stack
    {
     DataType* array;
     int capacity;
     int size;
    }Stack;
    void StackInit(Stack* ps)
    {
     assert(ps);
     ps->array = (DataType*)malloc(sizeof(DataType) * 3);
     if (NULL == ps->array)
     {
     assert(0);
     return;
     }
         ps->capacity = 3;
     ps->size = 0;
    }
    void StackDestroy(Stack* ps)
    {
     assert(ps);
     if (ps->array)
     {
     free(ps->array);
     ps->array = NULL;
     ps->capacity = 0;
     ps->size = 0;
     }
    }
    void CheckCapacity(Stack* ps)
    {
     if (ps->size == ps->capacity)
     {
     int newcapacity = ps->capacity * 2;
     DataType* temp = (DataType*)realloc(ps->array, 
    newcapacity*sizeof(DataType));
     if (temp == NULL)
     {
     perror("realloc申请空间失败!!!");
     return;
     }
     ps->array = temp;
     ps->capacity = newcapacity;
     }
    }
    void StackPush(Stack* ps, DataType data)
    {
     assert(ps);
     CheckCapacity(ps);
     ps->array[ps->size] = data;
     ps->size++;
    }
    int StackEmpty(Stack* ps)
    {
     assert(ps);
     return 0 == ps->size;
    }
    void StackPop(Stack* ps)
    {
     if (StackEmpty(ps))
     return;
     ps->size--;
    }
    DataType StackTop(Stack* ps)
    {
     assert(!StackEmpty(ps));
     return ps->array[ps->size - 1];
        }
    int StackSize(Stack* ps)
    {
     assert(ps);
     return ps->size;
    }
    int main()
    {
     Stack s;
     StackInit(&s);
     StackPush(&s, 1);
     StackPush(&s, 2);
     StackPush(&s, 3);
     StackPush(&s, 4);
     printf("%d\n", StackTop(&s));
     printf("%d\n", StackSize(&s));
     StackPop(&s);
     StackPop(&s);
     printf("%d\n", StackTop(&s));
     printf("%d\n", StackSize(&s));
     StackDestroy(&s);
     return 0;
    }

    可以看到,在用C语言实现时,Stack相关操作函数有以下共性:

    每个函数的第一个参数都是Stack*

    函数中必须要对第一个参数检测,因为该参数可能会为NULL

    函数中都是通过Stack*参数操作栈的

    调用时必须传递Stack结构体变量的地址

    结构体中只能定义存放数据的结构,操作数据的方法不能放在结构体中,即数据和操作数据

    C语言和C++实现Stack有什么区别?,C语言和C++实现Stack有什么区别?,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,访问,第2张
    (图片来源网络,侵删)

    的方式是分离开的,而且实现上相当复杂一点,涉及到大量指针操作,稍不注意可能就会出

    错。

  2. C++实现
typedef int DataType;
class Stack
{
public:
 void Init()
 {
 _array = (DataType*)malloc(sizeof(DataType) * 3);
 if (NULL == _array)
 {
 perror("malloc申请空间失败!!!");
 return;
 }
 _capacity = 3;
 _size = 0;
 }
     void Push(DataType data)
 {
 CheckCapacity();
 _array[_size] = data;
 _size++;
 }
 void Pop()
 {
 if (Empty())
 return;
 _size--;
 }
 DataType Top(){ return _array[_size - 1];}
 int Empty() { return 0 == _size;}
 int Size(){ return _size;}
 void Destroy()
 {
 if (_array)
 {
 free(_array);
 _array = NULL;
 _capacity = 0;
 _size = 0;
 }
 }
private:
 void CheckCapacity()
 {
 if (_size == _capacity)
 {
 int newcapacity = _capacity * 2;
 DataType* temp = (DataType*)realloc(_array, newcapacity *
sizeof(DataType));
 if (temp == NULL)
 {
 perror("realloc申请空间失败!!!");
 return;
 }
 _array = temp;
 _capacity = newcapacity;
 }
 }
private:
 DataType* _array;
 int _capacity;
 int _size;
};
int main()
{
 Stack s;
 s.Init();
 s.Push(1);
 s.Push(2);
 s.Push(3);
 s.Push(4);
 
 printf("%d\n", s.Top());
 printf("%d\n", s.Size());
 s.Pop();
 s.Pop();
 printf("%d\n", s.Top());
 printf("%d\n", s.Size());
 s.Destroy();
 return 0;
}

总结:

C++中通过类可以将数据 以及 操作数据的方法进行完美结合,通过访问权限可以控制那些方法在类外可以被调用,即封装 *,在使用时就像使用自己的成员一样,更符合人类对一件事物的认知。而且每个方法不需要传递Stack的参数了,编译器编译之后该参数会自动还原,即C++中 Stack \参数是编译器维护的,C语言中需用用户自己维护。

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

C语言和C++实现Stack有什么区别?,C语言和C++实现Stack有什么区别?,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,访问,第3张
(图片来源网络,侵删)

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~  

 


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]