栈的基本 *** 作的实现(c语言),高手速来!!

栈的基本 *** 作的实现(c语言),高手速来!!,第1张

/*程序握消错误太多*/ #include"stdio.h"

#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)

}

}

已经可以运行。主要问题就是出栈函数的问题,需御物镇要你仔细考虑一下镇粗。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存