停车场栈(作业笔记)

停车场栈(作业笔记)

文章目录

  • 停车场栈(作业笔记)
  • 作业内容
    • 实验目的
    • 题目
  • 一、需要准备的头文件与结构体
  • 二、初始化停车场(创建空链表)
  • 三、停车(头插法新结点)
  • 四、取车(从头删除结点)
  • 五、清空(清空链表)
  • 六、查看停车情况(遍历链表)
  • 总结


作业内容

实验目的

掌握栈应用的算法设计。

题目

停车场栈(作业笔记)_第1张图片


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

代码如下:

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

总结

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

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