C语言编写完整的代码:如下结点结构,试用该结构构造一个链栈,并有实现以下功能的函数(1)初始化栈 (2)显示栈顶元素 (3)将一个元素入栈 (4)从栈中弹出一个元素 (5)判栈是否为空 (6)判栈是否为满
时间: 2024-05-15 18:14:37 浏览: 82
以下是用C语言编写完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkStack;
// 初始化链栈
void InitStack(LinkStack *S){
*S = NULL;
}
// 判断链栈是否为空
int StackEmpty(LinkStack S){
if(S == NULL)
return 1;
else
return 0;
}
// 入栈操作
int Push(LinkStack *S, Node *newNode){
if(*S == NULL){
*S = newNode;
newNode->next = NULL;
}
else{
newNode->next = *S;
*S = newNode;
}
printf("入栈成功!\n");
return 1;
}
// 出栈操作
int Pop(LinkStack *S){
Node *p;
if(StackEmpty(*S) == 1){
printf("栈为空!\n");
return 0;
}
else{
p = *S;
*S = (*S)->next;
printf("出栈元素为:%d\n", p->data);
free(p);
}
return 1;
}
// 显示栈顶元素
int GetTop(LinkStack S){
if(StackEmpty(S) == 1){
printf("栈为空!\n");
return 0;
}
else{
printf("栈顶元素为:%d\n", S->data);
}
return 1;
}
// 主函数
int main(){
LinkStack S;
InitStack(&S);
int menu;
do{
printf("\n");
printf("1.初始化链栈\n");
printf("2.显示栈顶元素\n");
printf("3.将一个元素入栈\n");
printf("4.从栈中弹出一个元素\n");
printf("5.判栈是否为空\n");
printf("0.退出程序\n");
printf("请输入操作对应的数字:");
scanf("%d", &menu);
switch(menu){
case 1:{
InitStack(&S);
printf("链栈初始化成功!\n");
break;
}
case 2:{
GetTop(S);
break;
}
case 3:{
Node *newNode = (Node *)malloc(sizeof(Node));
printf("请输入入栈元素:");
scanf("%d", &newNode->data);
Push(&S, newNode);
break;
}
case 4:{
Pop(&S);
break;
}
case 5:{
if(StackEmpty(S) == 1)
printf("链栈为空!\n");
else
printf("链栈不为空!\n");
break;
}
case 0:{
printf("程序已退出,谢谢使用!\n");
break;
}
default:{
printf("输入有误,请重新输入!\n");
break;
}
}
}while(menu != 0);
return 0;
}
```
如上述代码,使用该结构可以构造一个链栈,并实现以下功能:
(1)初始化栈
(2)显示栈顶元素
(3)将一个元素入栈
(4)从栈中弹出一个元素
(5)判栈是否为空
(6)判栈是否为满
阅读全文