数据结构之用数组和链表实现栈

本文解决的问题是:

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;
}

如有疑问,请及时提出,谢谢!!

猜你喜欢

转载自blog.csdn.net/zly412934578/article/details/79081252