c语言计算栈的长度,C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作...

1、数据结构-链式栈的实现-C语言

//链式栈的链式结构

typedef struct StackNode

{

int data;

struct StackNode *next;

} StackNode,*LinkStack;

//链式栈初始化---1

void InitStack(LinkStack* S);

//链式栈的销毁---2

void DestroyStack(LinkStack* S);

//链式栈的清空---3

void ClearStack(LinkStack* S);

//判断链式栈是否为空---4

void StackEmpty(LinkStack S);

//链式栈的长度---5

int StackLength(LinkStack S);

//取链式栈顶元素---6

void GetTop(LinkStack S);

//入链式栈操作---7

void Push(LinkStack* S, int value);

//出链式栈操作---8

void Pop(LinkStack* S,int* value);

//依次访问链式栈元素---9

void StackTraverse(LinkStack S);

void ShowHelp();

//----------------------------------------------------

void ShowHelp()

{

printf("1---初始化链式栈\n");

printf("2---销毁链式栈\n");

printf("3---清空链式栈\n");

printf("4---判断链式栈是否为空\n");

printf("5---链式栈的长度\n");

printf("6---取链式栈顶元素\n");

printf("7---入链式栈操作\n");

printf("8---出链式栈操作\n");

printf("9---依次访问链式栈元素\n");

}

void InitStack(LinkStack* S)

{

//栈顶指针指向空,刚开始只有一个指针,不和单链表一样有头结点。不需要分配空间。

*S = NULL;

}

void DestroyStack(LinkStack* S)

{

LinkStack q;

while(*S){

q = *S;

*S = (*S)->next;

free(q);

}

}

void ClearStack(LinkStack* S)

{

LinkStack q;

while(*S){

q = *S;

*S = (*S)->next;

free(q);

}

*S = NULL;

//和销毁差别在于,销毁后,最后又初始化了一下

}

void StackEmpty(LinkStack S)

{

if(S == NULL)

printf("此栈为空栈。\n");

else

printf("此栈不为空栈。\n");

}

int StackLength(LinkStack S)

{

int num = 0;

LinkStack q = S;

while(q){

num++;

q = q->next;

}

return num;

}

void GetTop(LinkStack S)

{

if(!S)

{

printf("此栈为空。\n");

return;

}

int num;

num = S->data;

printf("此栈顶元素为%d。\n",num);

}

void Push(LinkStack* S, int value)

{

LinkStack p = (StackNode*) malloc(sizeof(StackNode));

if(!p){

printf("分配失败\n");

return ;

}

p->data = value;

p->next = *S;

*S = p;

printf("入栈成功\n");

}

void Pop(LinkStack* S,int* value)

{

if(*S == NULL)

{

printf("栈中无元素,不能再进行出栈操作.\n");

return;

}

*value = (*S)->data;

LinkStack p = *S;

*S = (*S)->next;

free(p);

printf("出栈成功\n");

}

void StackTraverse(LinkStack S)

{

if(S == NULL){

printf("此栈为空。\n");

return;

}

LinkStack p = S;

printf("从栈顶到栈底值依次为:\n");

while(p != NULL)

{

printf("%d ",p->data);

p = p->next;

}

printf("\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值