用链表存储堆栈内容,出栈入栈函数~~我快崩溃了!

来源:百度知道 编辑:UC知道 时间:2024/09/18 06:48:56
#include<stdio.h>
#include<stdlib.h>
#define Max 100
typedef struct node * list_pointer;
typedef struct node{
int key;
list_pointer *link;
};
void add(list_pointer a,int n);
list_pointer deletes(list_pointer b);

main()
{
int i;
list_pointer ptr,lp;
lp=(list_pointer *)malloc(sizeof(node));
ptr=(list_pointer *)malloc(sizeof(node));
add(ptr,5);
printf("%d",deletes(ptr));
free(ptr);
add(lp,6);
printf("%d",deletes(lp));
free(ptr);
}
void add(list_pointer a,int n){
p=(list_pointer *)malloc(sizeof(node));
p->key=n;
p->link=a->link;
a->link=p;
}
list_pointer deletes(list_pointer b){
int x;
if(b->link==null)return(null);
else
{
p=b->link;
x=p->key;
b->link=p->link;
free(p);
return(x);

}

1、main函数默认是int,需要一个return 0;
改成void,少一个警告。
void main()

2、typedef应用错误。
typedef struct node * list_pointer;
typedef struct node{
int key;
list_pointer *link;
};改成:
typedef struct node * list_pointer;
struct node{
int key;
list_pointer link;//已经是指针
};

3、list_pointer已经被定义为指针,不用再次指针:
main中:

lp=(list_pointer *)malloc(sizeof(node));
ptr=(list_pointer *)malloc(sizeof(node));
改为:
lp=(list_pointer)malloc(sizeof(node));
ptr=(list_pointer)malloc(sizeof(node));

add中:
p=(list_pointer *)malloc(sizeof(node));//因为你还没有定义
改为
list_pointer p=(list_pointer)malloc(sizeof(node));

4、null在C中没定义,只能用NULL,这是预定义过的
if(b->link==null)return(null);
——〉if(b->link==NULL)return(NULL);

5、deletes中p没有定义:
else
{
list_pointer p;
p=b->link;
x=p->key;
b->link=p->link;
free(p);
return