#include <string.h>
#define MaxSize 100
int mystack[MaxSize]/* 第0个单晌首元保存现在的长度 */
/* 初始化函数 */
void init_stack(int* stack){
memset(stack,0,sizeof(stack))
}
/* 入栈函数 */
void push_back(int* stack,int&num){
if(stack[0]<MaxSize-1){
++stack[0]
stack[ stack[0] ] = num
}
else{
printf("ERORR!\n")
}
}
/* 返回栈空间 */
int size(int* stack){
return stack[0]
}
/* 返回栈顶函数悄谨悉 */
int top(int* stack){
if(stack[0]>0){
return stack[ stack[0] ]
}
else{
printf("ERORR!\n")
return -1
}
}
/* 出栈函数 */
void pop(int* stack){
if(stack[0]>0){
--stack[0]
}
else{
printf("ERORR!\n")
}
}
#include<stdlib.h>typedef struct node
{
int num
struct node *next
}*link,LINK
void empty(link top)
{
top=NULL
}
int pd(link top)
{
if(top==NULL)
{
return 0
}
else
{
return 1
}
}
link create(link top,int n)
{
link s
s=(link)malloc(sizeof(LINK))//分配时要分配一个结构体的空间,而不是仅仅一个指针的空间。
s->num=n
s->next=top
top=s
return top
}
/*如上个函数,要返回蚂让一个指针,否则是不能改变top的值的。因为在函数中只能修改指针指向地址的内容,而它指向的地址是不会改变的。因此要想使指针指向的地址发生变化,要重新返回一个link。出栈的数据放到x中。*/
link outword(link top,int *x)
{
link p
if(pd(top)==0)
{
printf("underflow")
return top
}
else
{
p=top
*x=top->num
top=top->next
free(p)
return top
}
}
void main()
{
link top=NULL
int n,*x=(int*)malloc(sizeof(int))
//top=(link)malloc(sizeof(LINK))
//empty(top)
printf("进栈\n")
scanf("%d",&n)
//top->num=n
while(n!=-1)
{
top=create(top,n)
scanf("%d",&n)
}
printf("出栈\n")
while(pd(top)!=NULL)
{
top=outword(top,x)
printf("%d\n",*x)
}
}
已经可以运行。主要问题就是出栈函数的问题,需御物镇要你仔细考虑一下镇粗。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)