当前位置:网站首页>Static linked list (subscript of array instead of pointer)
Static linked list (subscript of array instead of pointer)
2022-07-03 13:33: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;
}
// Find a useful one from the numbers
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");
}
Test code
#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)
{
}
}
边栏推荐
- Start signing up CCF C ³- [email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g
- 编程内功之编程语言众多的原因
- Several common optimization methods matlab principle and depth analysis
- 道路建设问题
- Kivy教程之 如何自动载入kv文件
- 这本数学书AI圈都在转,资深ML研究员历时7年之作,免费电子版可看
- 【电脑插入U盘或者内存卡显示无法格式化FAT32如何解决】
- Brief analysis of tensorboard visual processing cases
- 显卡缺货终于到头了:4000多块可得3070Ti,比原价便宜2000块拿下3090Ti
- CVPR 2022 | interpretation of 6 excellent papers selected by meituan technical team
猜你喜欢

Flink SQL knows why (12): is it difficult to join streams? (top)

MySQL

双向链表(我们只需要关注插入和删除函数)

Brief analysis of tensorboard visual processing cases

CVPR 2022 | 美团技术团队精选6篇优秀论文解读

Several common optimization methods matlab principle and depth analysis

KEIL5出现中文字体乱码的解决方法

Flink SQL knows why (XI): weight removal is not only count distinct, but also powerful duplication

regular expression

Road construction issues
随机推荐
IBEM 数学公式检测数据集
网上开户哪家证券公司佣金最低,我要开户,网上客户经理开户安全吗
Mycms we media mall v3.4.1 release, user manual update
Flutter动态化 | Fair 2.5.0 新版本特性
开始报名丨CCF C³[email protected]奇安信:透视俄乌网络战 —— 网络空间基础设施面临的安全对抗与制裁博弈...
PowerPoint 教程,如何在 PowerPoint 中將演示文稿另存為視頻?
这本数学书AI圈都在转,资深ML研究员历时7年之作,免费电子版可看
Flink SQL knows why (13): is it difficult to join streams? (next)
静态链表(数组的下标代替指针)
The principle of human voice transformer
Oracle memory management
Kivy教程之 盒子布局 BoxLayout将子项排列在垂直或水平框中(教程含源码)
106. 如何提高 SAP UI5 应用路由 url 的可读性
JS 将伪数组转换成数组
2022-02-14 analysis of the startup and request processing process of the incluxdb cluster Coordinator
MapReduce implements matrix multiplication - implementation code
Task5: multi type emotion analysis
KEIL5出现中文字体乱码的解决方法
Cadre de logback
Flink SQL knows why (VIII): the wonderful way to parse Flink SQL tumble window