终于用C实现了我的堆栈链表,但是有比我更简单的方法吗?

终于用C实现了我的堆栈链表,但是有比我更简单的方法吗?,c,data-structures,linked-list,stack,C,Data Structures,Linked List,Stack,我终于建立了我的堆栈链表。而且效果很好。 但我想知道是否有比我更简单、更短的方法 我觉得。。我的方法不是实现堆栈链表的最佳方法 最好的方法:简单和简短 我的全部代码如下 #include <stdio.h> #include <stdlib.h> typedef int element; typedef struct node{ element data; struct node* next; }node; node* head = NULL; void pu

我终于建立了我的堆栈链表。而且效果很好。 但我想知道是否有比我更简单、更短的方法

我觉得。。我的方法不是实现堆栈链表的最佳方法

最好的方法:简单和简短

我的全部代码如下

#include <stdio.h>
#include <stdlib.h>

typedef int element;
typedef struct node{
  element data;
  struct node* next;
}node;
node* head = NULL;

void push(element data){
  node* temp = (node*)malloc(sizeof(node));
  if(temp==NULL)
    printf("out of memory");
  else{
    temp->data = data;
    temp->next = head;
    printf("push(%d)\n", temp->data);
    head = temp;
  }
}

void pop(){
  node* temp;
  if(head==NULL) return;
    temp = head;
    head = temp->next;
    free(temp);
}

void printStack(){
  node* temp = head;
  while(temp!=NULL){
    printf("%d\n", temp->data);
    temp = temp->next;
  }
}

void is_Empty(){
  if(head==NULL){
    printf("EMPTY\n");
  }
  else{
    printf("NOT EMPTY\n");
  }
}
void main() {
  push(10);
  push(20);
  push(30);
  push(40);
  printStack();
  is_Empty();
}
#包括
#包括
typedef int元素;
类型定义结构节点{
元素数据;
结构节点*下一步;
}节点;
node*head=NULL;
无效推送(元素数据){
node*temp=(node*)malloc(sizeof(node));
if(temp==NULL)
printf(“内存不足”);
否则{
温度->数据=数据;
温度->下一步=头部;
printf(“推送(%d)\n)”,临时->数据;
压头=温度;
}
}
void pop(){
节点*温度;
if(head==NULL)返回;
温度=水头;
头=温度->下一步;
免费(临时);
}
void printStack(){
节点*温度=头部;
while(temp!=NULL){
printf(“%d\n”,临时->数据);
温度=温度->下一步;
}
}
void是空的(){
if(head==NULL){
printf(“空\n”);
}
否则{
printf(“非空\n”);
}
}
void main(){
推(10);
推(20);
推(30);
推(40);
printStack();
是空的吗;
}

看起来不错,但通常在弹出时,您希望返回删除的元素。另外,我还有一个释放堆栈的函数,这样,如果您想要创建一个抽象级别,人们仍然可以正确地管理他们的内存

看起来不错,但通常在弹出时,您希望返回删除的元素。另外,我还有一个释放堆栈的函数,这样,如果您想要创建一个抽象级别,人们仍然可以正确地管理他们的内存

这在@Mat上会更好。我加入了那个网站,只是想上传我的问题。但它告诉我,“你只能每40分钟发布一次”。是因为我已经在stackoverflow上发布了吗?可能是的。请稍等。@Mat谢谢。
void main()
不是好的C语言,除非您专门在Windows上工作。在C(但不是C++)中,函数定义(如
void printStack(){…}
不提供函数的原型-您需要
void printStack(void){…}
来提供原型。如何获得堆栈顶部的值?您的
pop()
函数没有返回值-似乎没有办法获取要使用的值。你在
isEmpty()
中将I/O与测试混合在一起-从长远来看,这不是一个好主意(意思是“当你真正使用此代码时”)。这在@Mat上会更好。我加入了该网站,只是试图上传我的问题。但它告诉我,“你只能每40分钟发布一次”。是因为我已经在stackoverflow上发布了吗?可能是的。请稍等。@Mat谢谢。
void main()
不是好的C语言,除非您专门在Windows上工作。在C(但不是C++)中,函数定义(如
void printStack(){…}
不提供函数的原型-您需要
void printStack(void){…}
来提供原型。如何获得堆栈顶部的值?您的
pop()
函数没有返回值-似乎没有办法获取要使用的值。您在
isEmpty()
中将I/O与测试混合在一起-从长远来看,这不是一个好主意(意思是“当您真正使用此代码时”)。