数据结构实验 栈和队列

(1)采用链式存储实现栈的初始化、入栈、出栈操作。

(2)采用顺序存储实现栈的初始化、入栈、出栈操作。

(3)采用链式存储实现队列的初始化、入队、出队操作。

(4)采用顺序存储实现循环队列的初始化、入队、出队操作。

(5)在主函数中设计一个简单的菜单,分别测试上述算法。

 

//用链表实现栈用的是头插法,用链表实现队列用的是尾插法。

#include<stdio.h>

#include<stdlib.h>

#define N 105

int a[N];

struct node

{

	int data;

	node *next;

}*h;

void LinkStack()//用链表实现栈

{

	node *s;

	int n;

	printf("请输入需要入栈元素的数量:      ");

	scanf("%d",&n);

	printf("请输入需要入栈的元素:          ");

	h=NULL;

	s=h;

	while(n--)

	{

		s=(node *)malloc(sizeof(node));

		scanf("%d",&s->data);

		s->next=h;

		h=s;

	}

	printf("输出栈中的元素:                ");

	while(h!=NULL)

	{

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

		h=h->next;

	}

	printf("\n");

	return ;

}

void QueStack()//用顺序表实现栈

{

	int n;

	int top;

	printf("请输入需要入栈的元素的数量:    ");

	scanf("%d",&n);

	printf("请输入需要入栈的元素:          ");

	top=0;

	a[top++]=-1;

	while(n--)

	{

		scanf("%d",&a[top++]);

		top%=(N-1);

	}

	printf("输出栈中的元素:                ");

	top--;

	if(top<0)

		top=N-1;

	while(a[top]!=-1)

	{

		printf("%d ",a[top--]);

		if(top<0)

			top=N-1;

	}

	printf("\n");

	return ;

}

void LinkQueue()//用链表实现队列

{

	node *s,*e;

	int n;

	h=(node *)malloc(sizeof(node));

	s=h;

	printf("请输入需要入队的元素的数量:    ");

	scanf("%d",&n);

	printf("请输入需要入队的元素:          ");

	while(n--)

	{

		e=s;

		s=(node *)malloc(sizeof(node));

		scanf("%d",&s->data);

		e->next=s;

		s->next=NULL;

	}

	printf("输出队列中的元素:              ");

	h=h->next;

	while(h!=NULL)

	{

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

		h=h->next;

	}

	printf("\n");

	return ;

}

void QueQueue()//用顺序表实现队列

{

	int n,i;

	printf("请输入需要入队元素的数量:      ");

	scanf("%d",&n);

	printf("请输入需要入队的元素:          ");

	for(i=0;i<n;i++)

		scanf("%d",&a[i]);

	printf("输出队列中的元素:              ");

	for(i=0;i<n;i++)

		printf("%d ",a[i]);

	printf("\n");

	return ;

}

int PrintMenu()

{

	printf("******************目录*******************\n");

	printf("用链式存储实现栈的操作:                1\n");

	printf("用顺序存储实现栈的操作:                2\n");

	printf("用链式存储实现队列的操作:              3\n");

	printf("用顺序存储实现队列的操作:              4\n");

	printf("结束操作。                              0\n");

	printf("请输入操作指令:                        ");

	int T;

	scanf("%d",&T);

	switch(T)

	{

		case 1:LinkStack();break;

		case 2:QueStack();break;

		case 3:LinkQueue();break;

		case 4:QueQueue();break;

		case 0: return 1;

		default:printf("输入错误,请重新输入。\n");break;

	}

	return 0;

}

int main()

{

	int flag;

	flag=0;

	while(1)

	{

		flag=PrintMenu();

		printf("\n");

		if(flag)

			break;

	}

	printf("谢谢使用!\n");

	return 0;

}

 

 

 

你可能感兴趣的:(数据结构)