停车场栈(作业笔记)

停车场栈(作业笔记)


作业内容

实验目的

掌握栈应用的算法设计。

题目

在这里插入图片描述


一、需要准备的头文件与结构体

代码如下:

# include <stdio.h>
# include <string.h>
# include <time.h>
# include <stdlib.h>
# define Max 5
typedef struct Node
{
    
    
	char date[20];
	time_t t;
	struct Node *next;	
}Node;

typedef struct List
{
    
    
	Node *top;

	int size;
}List;

二、初始化停车场(创建空链表)

代码如下:

void Creat(List *list)
{
    
    
	Node *s = (Node*)malloc(sizeof(Node));
	list->top = s;
	list->top->next = NULL;
	list->size = 0;
}

三、停车(头插法新结点)

代码如下:

void Add(List *list)
{
    
    
	if(list->size >= Max)
	{
    
    
		printf("车库已满\n");
		return;
	}
	else
	{
    
    
		Node *p;
		struct tm *T;
		p = list->top;
		Node *newnode = (Node*)malloc(sizeof(Node));
		memset(newnode,0,sizeof(newnode));
		printf("请输入您的车牌号:");
		scanf("%s",newnode->date);
		time(&(newnode->t)); 
		int i;
		for(i = 1;i <= list->size;i++)
		{
    
    
			if(strcmp(newnode->date,p->date) == 0)
			{
    
    
				printf("车库中已有车牌为:%s的车辆\n",p->date);
				return;
			}
			else
				p = p->next;
		}
		newnode->next = list->top;
		list->top = newnode;
		list->size++;
		T = localtime(&(newnode->t));
		printf("车牌号为:%s的车进来了\n",newnode->date);
		printf("时间是:%d年%d月%d日%d时%d分%d秒\n",
			1900+T->tm_year,
			1+T->tm_mon,
			T->tm_mday,
			T->tm_hour,
			T->tm_min,
			T->tm_sec
				);
	}
}

四、取车(从头删除结点)

代码如下:

void Reduce(List*list)
{
    
    
	if(list->size == 0)
	{
    
    
		printf("车库为空\n无法取车\n");
		return;
	}
	else
	{
    
    
		Node *p = (Node*)malloc(sizeof(Node));
		struct tm *T;
		p = list->top;
		printf("车牌号为:%s的车开走了\n",p->date);
		printf("进场");
		T = localtime(&(p->t));
		printf("时间是:%d年%d月%d日%d时%d分%d秒\n",
			1900+T->tm_year,
			1+T->tm_mon,
			T->tm_mday,
			T->tm_hour,
			T->tm_min,
			T->tm_sec
				);
		list->top = p->next;
		free(p);
		list->size--;
	}
}

五、清空(清空链表)

代码如下:

void Destroy(List *list)
{
    
    
	if(list->size == 0)
	{
    
    
		printf("车库为空,无法清空\n");
		return;
	}
	else
	{
    
    
		Node *p = (Node*)malloc(sizeof(Node));
		struct tm * T;
		p = list->top;
		for(;list->size>0;list->size--)
		{
    
    
			p = list->top;
			T = localtime(&(p->t));
			printf("车牌号为:%s的车开走了\n",p->date);
			printf("时间是:%d年%d月%d日%d时%d分%d秒\n",
				1900+T->tm_year,
				1+T->tm_mon,
				T->tm_mday,
				T->tm_hour,
				T->tm_min,
				T->tm_sec
					);
			list->top = p->next;
			free(p);
		}
	}
}

六、查看停车情况(遍历链表)

代码如下:

void Print(List *list)
{
    
    
	if(list->size == 0)
	{
    
    
		printf("车库为空,无法查看停车情况\n");
		return;
	}
	else
	{
    
    
		Node *p = (Node*)malloc(sizeof(Node));
		struct tm *T;
		p = list->top;
		printf("车库有%d辆车\n",list->size);
		for(;p->next != NULL;)
		{
    
    
			T = localtime(&(p->t));
			printf("车牌号为:%s  ",p->date);
			printf("时间是:%d年%d月%d日%d时%d分%d秒\n",
				1900+T->tm_year,
				1+T->tm_mon,
				T->tm_mday,
				T->tm_hour,
				T->tm_min,
				T->tm_sec
					);			
			p = p->next;
		}
	}
}

总结

我对于栈的理解是:栈是被限制了的链表,对于链表的运用熟悉了,栈的运用也就轻松了很多。

猜你喜欢

转载自blog.csdn.net/qq_51603875/article/details/115036806