C++1.建立一个空栈,并按要求完成链栈的相关操作: (1)编写入栈函数,随机产生10个100以内的整数,并按输入顺序依次入栈,考虑判断上溢情况; (2)编写出栈函数,从键盘输入出栈元素个数n(n<10),将n个元素出栈并显示出栈元素,考虑判断下溢情况; (3)编写取栈顶元素函数,若栈不为空,则取出栈顶元素显示;否则提示栈空。
时间: 2023-06-09 19:02:58 浏览: 112
ChitGPT: 好的,我明白了您的问题。以下是我给出的解答:
(1)如下是链栈的初始化,和随机产生10个100以内的整数,并按输入顺序依次入栈的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct node{
int data;
struct node *next;
}Stack;
Stack *initStack() //初始化栈
{
Stack *s=(Stack*)malloc(sizeof(Stack));
s->next = NULL;
return s;
}
int push(Stack *s) //入栈
{
if(s == NULL)
{
printf("栈不存在\n");
return -1;
}
else
{
int i;
for(i = 0;i < MAXSIZE;i++)
{
if(s->next == NULL || i == 0)
{
Stack *newStack=(Stack*)malloc(sizeof(Stack));
newStack->data = rand()%100; //随机生成0~99的整数
newStack->next = s->next;
s->next = newStack;
}
}
printf("入栈成功\n");
return 0;
}
}
int count(Stack *s) //计算栈内元素个数
{
if(s == NULL)
{
printf("栈不存在\n");
return -1;
}
else
{
int count = 0;
Stack *tempStack=s->next;
while(tempStack != NULL)
{
count++;
tempStack = tempStack->next;
}
return count;
}
}
int pop(Stack *s) //出栈
{
if(s == NULL)
{
printf("栈不存在\n");
return -1;
}
else
{
int n,countValue = count(s);
printf("请输入要出栈的元素个数:");
scanf("%d",&n);
if(n <= 0)
{
printf("请输入大于0的整数!\n");
return -1;
}
if(n > countValue)
{
printf("超出栈内元素数量!\n");
return -1;
}
for(int i = 0; i < n; i++)
{
Stack *delStack = s->next;
int delValue = delStack->data;
s->next = delStack->next;
printf("出栈元素%d\n",delValue);
free(delStack);
}
printf("出栈成功\n");
return 0;
}
}
void top(Stack *s) //栈顶元素
{
Stack *tempStack=s->next;
if(tempStack == NULL)
{
printf("栈为空\n");
}
else
{
printf("栈顶元素为:%d\n",tempStack->data);
}
}
int main()
{
Stack *s=initStack();
push(s); //随机产生10个100以内的整数,并按输入顺序依次入栈
pop(s); //从键盘输入出栈元素个数n(n<10),将n个元素出栈并显示出栈元素
top(s); //若栈不为空,则取出栈顶元素显示
return 0;
}
```
(2)栈的定义及相关操作的代码实现在上面的代码中,您只需在主函数中调用相关操作函数即可完成链栈的相关操作。
希望以上的解答可以帮您解决问题。如果您还有其他问题或疑惑,欢迎随时提出。
阅读全文