当前位置:网站首页>静态链表(数组的下标代替指针)
静态链表(数组的下标代替指针)
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)
{
}
}
边栏推荐
- 106. How to improve the readability of SAP ui5 application routing URL
- Anan's doubts
- 常见的几种最优化方法Matlab原理和深度分析
- Road construction issues
- Server coding bug
- MySQL installation, uninstallation, initial password setting and general commands of Linux
- 网上开户哪家证券公司佣金最低,我要开户,网上客户经理开户安全吗
- The R language GT package and gtextras package gracefully and beautifully display tabular data: nflreadr package and gt of gtextras package_ plt_ The winloss function visualizes the win / loss values
- Red Hat Satellite 6:更好地管理服务器和云
- R language uses the data function to obtain the sample datasets available in the current R environment: obtain all the sample datasets in the datasets package, obtain the datasets of all packages, and
猜你喜欢

Typeerror resolved: argument 'parser' has incorrect type (expected lxml.etree.\u baseparser, got type)

18W word Flink SQL God Road manual, born in the sky

2022-02-11 heap sorting and recursion

PowerPoint tutorial, how to save a presentation as a video in PowerPoint?

物联网毕设 --(STM32f407连接云平台检测数据)

Kivy教程之 盒子布局 BoxLayout将子项排列在垂直或水平框中(教程含源码)

MySQL constraints

User and group command exercises

AI 考高数得分 81,网友:AI 模型也免不了“内卷”!

Flink SQL knows why (19): the transformation between table and datastream (with source code)
随机推荐
常见的几种最优化方法Matlab原理和深度分析
(first) the most complete way to become God of Flink SQL in history (full text 180000 words, 138 cases, 42 pictures)
The difference between session and cookie
Flutter动态化 | Fair 2.5.0 新版本特性
已解决(机器学习中查看数据信息报错)AttributeError: target_names
Task6: using transformer for emotion analysis
Road construction issues
Sword finger offer 17 Print from 1 to the maximum n digits
Kotlin - improved decorator mode
Kivy教程之 盒子布局 BoxLayout将子项排列在垂直或水平框中(教程含源码)
研发团队资源成本优化实践
2022-02-14 analysis of the startup and request processing process of the incluxdb cluster Coordinator
Spark实战1:单节点本地模式搭建Spark运行环境
显卡缺货终于到头了:4000多块可得3070Ti,比原价便宜2000块拿下3090Ti
网上开户哪家证券公司佣金最低,我要开户,网上客户经理开户安全吗
物联网毕设 --(STM32f407连接云平台检测数据)
February 14, 2022, incluxdb survey - mind map
使用Tensorflow进行完整的深度神经网络CNN训练完成图片识别案例2
2022-02-14 incluxdb cluster write data writetoshard parsing
Swiftui development experience: the five most powerful principles that a programmer needs to master