⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.c

📁 关于图的深度搜索的C语言代码实现
💻 C
字号:
#include <stdarg.h>
#include <stddef.h>
#include "assert.h"
#include "mem.h"
#include "list.h"

#define T List_T


 T List_list(int n, ...)
 {
	int i;
	T list, *p = &list;
	va_list ap;
	va_start(ap, n);
	for(i = va_arg(ap, int); n != -1 && i != -1;
		n = va_arg(ap, int), i = va_arg(ap, int))
	{
		NEW(*p);
		(*p)->number = n;
		(*p)->value = i;
		p = &(*p)->rest;
	}
	*p = NULL;
	va_end(ap);
	return list;
 }

T List_push(T list, int n, int v)
{
	T p;
	NEW(p);
	p->number = n;
	p->value = v;
	p->rest = list;
	return p;
}


T List_pop(T list)
{
	if(list)
	{
		T p = list->rest;
		FREE(list);
		return p;
	}
	else
		return list;
}

int List_length(T list)
{
	int n;
	for(n = 0; list; list = list->rest)
		n++;
	return n;
}


T List_findnumber(T list, int n)
{
	while(list && list->number != n)
		list = list->rest;
	return list;
}


void List_free(T *list)
{
	T p;
	assert(list);
	for(; *list; (*list) = p)
	{
		p = (*list)->rest;
		FREE(*list);
	}
}


T List_delete(T list, int n)
{
	T *p = &list;
	while((*p) && (*p)->number != n)
		p = &(*p)->rest;
	if(*p)
	{
		T pp = *p;
		*p = pp->rest;
		FREE(pp);
	}
	return list;
}

#include <stdio.h>
void List_print(T list)
{
	if(list == NULL)
		return ;
	while(list)
	{
		printf("list->number = %d, list->value = %d\n", 
			list->number, list->value);
		list = list->rest;
	}
}

/*
//test the function
#include <stdio.h>
int main(void)
{	
	int i;
	
	i=1;
	printf("====== T List_list(int n, ...)======\n");
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -1);
		List_print(list);
	}
	printf("\n");

	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(-1);
		List_print(list);
	}
	printf("\n");
	printf("\n\n\n\n");



	i=1;
	printf("======T List_push(T list, int n, int v)======\n");
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		List_print(list);
	}
	printf("\n");
	
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(-1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		List_print(list);
	}
	printf("\n");
	printf("\n\n\n\n");



	i=1;
	printf("======T List_pop(T list)======\n");
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
	}
	printf("\n");
	
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(-1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
	}
	printf("\n");
	printf("\n\n\n\n");




	
	i=1;
	printf("======int List_length(T list)======\n");
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
		printf("List_length(list) = %d\n", List_length(list));
	}
	printf("\n");
	
	printf( "the (%d) th to test: \n", i++ );
	{
		T list;
		list = List_list(-1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
		printf("List_length(list) = %d\n", List_length(list));
	}
	printf("\n");
	printf("\n\n\n\n");







	
	i=1;
	printf("======T List_findnumber(T list, int n)======\n");
	printf( "the (%d) th to test: \n", i++ );
	{
		T list, p;
		list = List_list(1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, -1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
		p = List_findnumber(list, 1);
		printf("p = %d\n", p);
	}
	printf("\n");
	
	printf( "the (%d) th to test: \n", i++ );
	{
		T list, p;
		list = List_list(-1);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_push(list, 1, 2);
		list = List_push(list, 8, 9);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		list = List_pop(list);
		List_print(list);
		p = List_findnumber(list, 8);
		printf("p = %d\n", p);
	}
	printf("\n");
	printf("\n\n\n\n");


	return 0;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -