当前位置:网站首页>静态链表(数组的下标代替指针)
静态链表(数组的下标代替指针)
2022-07-03 12:59:00 【fitpolo】
static_list.h
#ifndef _STATICLIST_H_
#define _STATICLIST_H_
#include "stdio.h"
#include "stdlib.h"
#define AVAILABLE -1
typedef struct _tag_static_list_node static_list_node;
typedef struct _tag_static_list static_list;
struct _tag_static_list_node
{
void *pdata;
int next;
};
struct _tag_static_list
{
int capacity;
int len;
static_list_node node[];
};
static_list* static_list_create(int capacity);
void static_list_destroy(static_list* list);
void static_list_clear(static_list* list);
int static_list_length(static_list* list);
int static_list_capacity(static_list* list);
int static_list_insert(static_list* list, void *pdata, int pos);
void *static_list_get(static_list *list,int pos);
void *static_list_delete(static_list *list, int pos);
void static_list_printf(static_list *list);
#endif
static_list.c
#include "static_list.h"
static_list* static_list_create(int capacity)
{
int i;
static_list *result=0;
result = malloc(sizeof(static_list)+sizeof(static_list_node)*(capacity+1));
if (result==0)
{
printf("static_list_create error -1\n");
return 0;
}
result->capacity = capacity;
result->len = 0;
result->node[0].next = 0;
for (i=1; i<(capacity+1); i++)
{
result->node[i].next = AVAILABLE;
}
return result;
}
void static_destroy(static_list* list)
{
free(list);
}
void static_list_clear(static_list* list)
{
int i;
list->len=0;
list->node[0].next=0;
for (i=1; i<(list->capacity+1); i++)
{
list->node[i].next = AVAILABLE;
}
}
int static_list_length(static_list* list)
{
return list->len;
}
int static_list_capacity(static_list* list)
{
return list->capacity;
}
int static_list_insert(static_list* list, void *pdata, int pos)
{
int i,j;
int current = 0;
if (list->capacity <= pos)
{
return -1;
}
//从数字找到一个可以用的
for (i=1; i<(list->capacity+1); i++)
{
if (list->node[i].next == AVAILABLE)
{
printf("available index:%d\n",i);
break;
}
}
if ( (list->capacity+1) == i)
{
printf("out of memory\n");
return -2;
}
list->node[i].pdata = pdata;
for (j=0; j<pos&&list->node[current].next!=0; j++)
{
current = list->node[current].next;
}
list->node[i].next = list->node[current].next;
printf("%d-i:%d-current:%d\n",list->node[current].next,i,current);
list->node[current].next = i;
list->len++;
return 0;
}
void *static_list_get(static_list *list,int pos)
{
void *result = 0;
int current = 0;
int i;
current = list->node[0].next;
if (current!=0 && pos<list->len)
{
for (i=0; i<pos; i++)
{
current = list->node[current].next;
}
result = list->node[current].pdata;
}
return result;
}
void *static_list_delete(static_list *list, int pos)
{
int pre_current = 0;
int current = 0;
int tmp;
int i = 0;
void *result = 0;
if (list->len>0 && pos>=0 && pos<list->len)
{
pre_current = 0;
current = list->node[0].next;
if (current)
{
for (i=0; i<pos; i++)
{
if (list->node[current].next==0)
{
break;
}
pre_current = current;
current = list->node[current].next;
}
tmp = list->node[current].next;
list->node[pre_current].next = tmp;
result = list->node[current].pdata;
list->node[current].next = AVAILABLE;
list->node[current].pdata = 0;
list->len--;
}
}else
{
printf("static_list_delete error :%d-%d\n",list->len,pos);
}
return result;
}
void static_list_printf(static_list *list)
{
int current = 0;
int i = 0;
void *pdata;
current = list->node[0].next;
printf("static_list_printf-");
for (i=0; i<list->len; i++)
{
pdata = list->node[current].pdata;
printf("[%d,0x%02x,value:%d]-",i,current,*((unsigned int *)pdata));
current = list->node[current].next;
}
printf("\n");
}
测试代码
#include "static_list.h"
#include "stdio.h"
#include "stdint.h"
int main(void)
{
static_list *head=0;
uint8_t i;
int tmp[11];
for (i=0; i<11; i++)
{
tmp[i] = i+1;
}
printf("hello \r\n");
head = static_list_create(10);
#if 1
for (i=0; i<11; i++)
{
static_list_insert(head,&tmp[i],0);
}
#else
for (i=0; i<9; i++)
{
static_list_insert(head,&tmp[i],0);
}
static_list_insert(head,&tmp[9],1);
#endif
static_list_printf(head);
// for (i=9; i>0; i--)
// {
// static_list_delete(head,i);
// static_list_printf(head);
// }
// static_list_delete(head,0);
// static_list_printf(head);
// static_list_delete(head,0);
// static_list_printf(head);
for (i=0; i<12; i++)
{
static_list_delete(head,0);
static_list_printf(head);
}
while(1)
{
}
}
边栏推荐
- Understanding of CPU buffer line
- When updating mysql, the condition is a query
- The network card fails to start after the cold migration of the server hard disk
- PowerPoint tutorial, how to save a presentation as a video in PowerPoint?
- Box layout of Kivy tutorial BoxLayout arranges sub items in vertical or horizontal boxes (tutorial includes source code)
- Flink SQL knows why (19): the transformation between table and datastream (with source code)
- Task6: using transformer for emotion analysis
- MySQL functions and related cases and exercises
- PostgreSQL installation
- Annotation and reflection
猜你喜欢
Comprehensive evaluation of double chain notes remnote: fast input, PDF reading, interval repetition / memory
Typeerror resolved: argument 'parser' has incorrect type (expected lxml.etree.\u baseparser, got type)
Smbms project
Logseq evaluation: advantages, disadvantages, evaluation, learning tutorial
MySQL functions and related cases and exercises
[Database Principle and Application Tutorial (4th Edition | wechat Edition) Chen Zhibo] [Chapter 6 exercises]
人身变声器的原理
File uploading and email sending
February 14, 2022, incluxdb survey - mind map
stm32和电机开发(从mcu到架构设计)
随机推荐
AI 考高数得分 81,网友:AI 模型也免不了“内卷”!
35道MySQL面试必问题图解,这样也太好理解了吧
Typeerror resolved: argument 'parser' has incorrect type (expected lxml.etree.\u baseparser, got type)
Flink SQL knows why (7): haven't you even seen the ETL and group AGG scenarios that are most suitable for Flink SQL?
elk笔记24--用gohangout替代logstash消费日志
[today in history] July 3: ergonomic standards act; The birth of pioneers in the field of consumer electronics; Ubisoft releases uplay
File uploading and email sending
[Database Principle and Application Tutorial (4th Edition | wechat Edition) Chen Zhibo] [Chapter III exercises]
已解决TypeError: Argument ‘parser‘ has incorrect type (expected lxml.etree._BaseParser, got type)
【被动收入如何挣个一百万】
Sword finger offer 17 Print from 1 to the maximum n digits
[Database Principle and Application Tutorial (4th Edition | wechat Edition) Chen Zhibo] [Chapter 7 exercises]
The shortage of graphics cards finally came to an end: 3070ti for more than 4000 yuan, 2000 yuan cheaper than the original price, and 3090ti
Road construction issues
Father and basketball
R语言使用data函数获取当前R环境可用的示例数据集:获取datasets包中的所有示例数据集、获取所有包的数据集、获取特定包的数据集
研发团队资源成本优化实践
[Database Principle and Application Tutorial (4th Edition | wechat Edition) Chen Zhibo] [Chapter V exercises]
服务器硬盘冷迁移后网卡无法启动问题
Smbms project