📄 list.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 + -