#include"stdlib.h"
#include"time.h"
#include"malloc.h"
#define
STACK_INIT_SIZE
10
//栈容量 typedef
struct
SqStack
{
int
top
//栈顶当前指针
int
*base
//栈空间数组
}SqStackvoid
InitStack(SqStack
&S)
//构造空栈S
int
Push(SqStack
&S,int
e)
返回0对,-1错
int
Pop(SqStack
&S)
//出栈
(栈地址)返回栈顶数据
int
StackLength(SqStack
S)
//返回站的元素个数,即求栈长
void
Print_S(SqStack
S)
//显示栈内数据 int
main()
{
SqStack
S
int
i=0
int
a,e
InitStack(S)
srand((unsigned)time(NULL))
//srand((unsigned)time(NULL))以time函数值(当前时间)作为种子
printf("随机填充5个元素为:
")
while(
i<5)
{
a
=
rand()%100
printf("%d
",
a)
Push(S,a)
i++
}
Print_S(S)
printf("请输入要插入栈顶的元素:")
scanf("%d",&e)
Push(S,e)
Print_S(S)
printf("再d出的栈顶元素为:%d
\n",Pop(S))
printf("栈的长度为:%d
\n",StackLength(S))
Print_S(S)
return
0
} void
InitStack(SqStack
&S)
//构造空栈S
{
S.base
=
(int
*)malloc(STACK_INIT_SIZE
*
sizeof(int))
//分配组慧皮歼数空间,长度STACK_INIT_SIZE
if
(S.base==NULL)
{
printf("内存分配失败!\n")
return
}
S.top=-1
} int
Push(SqStack
&S,int
e)
{
if(S.top>=STACK_INIT_SIZE)
{
printf("栈空间已满,入栈前冲失败!\n")
return
-1
}
else
{
S.base[++S.top]=e
return
0
}
} int
Pop(SqStack
&S)
//返回栈顶数据
{
if
(S.top>=0)
//栈内有数据
{
return
S.base[S.top--]
}
else
{
printf("空栈,无数据d出!\n")
return
-1
}
} int
StackLength(SqStack
S)
{
return
S.top+1
} void
Print_S(SqStack
S)
{
printf("\n出栈显示:")
if(S.top
==
-1)
printf("栈内无数据!\n")
else
{
while(S.top>=0
)
printf("%d
",Pop(S))
putchar('\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条)