本文解决的问题是:
8. 分别用数组和量表实现堆栈各项功能。
用数组实现,代码如下:
/********************8、分别用数组和量表实现堆栈各项功能*********************************/
/*********************8.1、用数组实现堆栈各项功能****************************/
#include<stdio.h>
#include<stdlib.h>
int count=0;//当前栈的元素个数
void push(int x,int array[])
{
if(count>=100)
{
printf("栈满\n");
}else{
array[count++]=x;
}
}
void pop()
{
if(count==0)
{
printf("栈为空!!");
}else{
count--;
}
}
void print_stack(int array[])
{
int i;
if(count==0)
{
printf("栈为空!\n");
}else{
printf("--栈顶--\n");
for(i=count-1;i>=0;i--)
{
printf("%d\n",array[i]);
}
printf("--栈底--\n");
}
}
int getCount()
{
return count;
}
int main()
{
//构建数组
int x;
int data;
int array[100]={0};
char r;
bool t=true;
while(t)
{
printf("请输入你要执行的操作:1:入栈;2:出栈\n");
scanf("%d",&x);
if(x == 1)
{
//入栈
printf("请输入要入栈的元素:\n");
scanf("%d",&data);
push(data,array);
printf("入栈后的结果为:\n");
print_stack(array);
}else if(x == 2)
{
//出栈
pop();
printf("出栈后的结果为:\n");
print_stack(array);
}
printf("是否继续:y:是; n:否\n");
scanf("%s",&r);
if(r == 'n')
{
t=false;
break;
}
}
printf("结束!\n");
printf("此时栈内元素为:\n");
print_stack(array);
return 0;
}
用链表实现,代码如下:
/********************8、分别用数组和量表实现堆栈各项功能*********************************/
/*********************8.2、用单链表实现堆栈各项功能****************************/
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
LNode *next;
}LNode,*LinkList;
//入栈
void push(int x,LinkList L)
{
LinkList s;
s=(LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s;
}
//出栈
void pop(LinkList L)
{
if(L->next == NULL)
{
printf("栈为空!!");
}else{
L->next=L->next->next;
}
}
//打印栈内信息
void print_stack(LinkList p)
{
if(p == NULL)
{
printf("栈为空!!\n");
}else{
printf("--栈顶--\n");
while(p != NULL)
{
printf("%d\n",p->data);
p = p->next;
}
printf("--栈底--\n");
}
}
int main()
{
int i=0;
int x;
char r;
bool t=true;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next = NULL;
while(t)
{
printf("请输入你要执行的操作:1:入栈;2:出栈\n");
scanf("%d",&x);
if(x == 1)
{
//入栈
printf("请输入要入栈的元素:\n");
scanf("%d",&x);
push(x,L);
printf("入栈后的栈内元素为:\n");
print_stack(L->next);
}else if(x == 2)
{
//出栈
pop(L);
printf("出栈后的栈内元素为:\n");
print_stack(L->next);
}
printf("是否继续:y:是; n:否\n");
scanf("%s",&r);
if(r == 'n')
{
t = false;
}
}
printf("结束!!");
return 0;
}
如有疑问,请及时提出,谢谢!!