当前位置:网站首页>Sequence table (implemented in C language)
Sequence table (implemented in C language)
2022-07-03 13:33:00 【fitpolo】
seq_list.c
#include "seq_list.h"
seq_list* seq_list_create(int capacity)
{
seq_list *result=0;
result = malloc( sizeof(seq_list) );
if (result ==0)
{
printf("malloc error\r\n");
return 0;
}
result->capacity = capacity;
result->len = 0;
result->node = malloc(sizeof(seq_list_node) * capacity);
if (result->node == 0)
{
free(result);
printf("malloc error\r\n");
return 0;
}
return result;
}
void seq_list_destroy(seq_list *list)
{
free(list);
}
void seq_list_clear(seq_list *list)
{
list->len = 0;
}
int seq_list_length(seq_list *list)
{
return list->len;
}
int seq_list_capacity(seq_list *list)
{
return list->capacity;
}
int seq_list_insert(seq_list *list,seq_list_node *node,int pos)
{
int i;
if (list->capacity <(list->len+1))
{
printf("seq_list_insert -1,pos:%d,node:0x%x\n",pos,(unsigned int)node);
return -1;
}
if (list->len <= pos)
{
pos = list->len;
}
for (i=list->len; i>pos; i--)
{
list->node[i] = list->node[i-1];
}
list->node[pos] = (seq_list_node)node;// It contains the address
list->len++;
return i;
}
seq_list_node *seq_list_get(seq_list *list,int pos)
{
seq_list_node *result=0;
if (pos >= list->capacity)
return 0;
if (pos >= list->len)
return 0;
result = (seq_list_node*)list->node[pos];
return result;
}
seq_list_node *seq_list_delete(seq_list *list,int pos)
{
int i=0;
if (pos >= list->capacity)
return 0;
if (pos >= list->len)
return 0;
if (list->len == 0)
return 0;
for (i=pos; i<(list->len-1); i++)// 4 0 1 2 3
{
list->node[i] = list->node[i+1];
}
list->len--;
return 0;
}
void seq_list_printf(seq_list *list)
{
int i;
seq_list_node tmp;
seq_list_node *pdata;
printf("capacity:%d-len:%d-\n",list->capacity,list->len);
for (i=0; i<list->len; i++)
{
tmp = list->node[i];
pdata = (seq_list_node*)tmp;
printf("0x%x-%d\n",tmp,pdata[0]);
}
printf("\n");
}
seq_list.h
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include "stdio.h"
#include "stdlib.h"
typedef unsigned int seq_list_node;
typedef struct _tag_seq_list seq_list;
struct _tag_seq_list
{
int capacity;
int len;
seq_list_node *node;
};
seq_list* seq_list_create(int capacity);
void seq_list_destroy(seq_list *list);
void seq_list_clear(seq_list *list);
int seq_list_length(seq_list *list);
int seq_list_capacity(seq_list *list);
int seq_list_insert(seq_list *list,seq_list_node *node,int pos);
seq_list_node *seq_list_get(seq_list *list,int pos);
seq_list_node *seq_list_delete(seq_list *list,int pos);
void seq_list_printf(seq_list *list);
#endif
Test code
#include "seq_list.h"
#include "stdio.h"
#include "stdint.h"
int main(void)
{
uint8_t i;
int tmp[11];
seq_list *head;
printf("hello \r\n");
head = seq_list_create(10);
printf("len:%d,capacity:%d\n",head->len,head->capacity);
for (i=0; i<11; i++)
{
tmp[i] = i+1;
}
seq_list_insert(head,(seq_list_node*)&tmp[0],0);
seq_list_insert(head,(seq_list_node*)&tmp[1],0);
seq_list_insert(head,(seq_list_node*)&tmp[2],0);
seq_list_insert(head,(seq_list_node*)&tmp[3],0);
seq_list_insert(head,(seq_list_node*)&tmp[4],0);
seq_list_insert(head,(seq_list_node*)&tmp[5],0);
seq_list_insert(head,(seq_list_node*)&tmp[6],0);
seq_list_insert(head,(seq_list_node*)&tmp[7],0);
seq_list_insert(head,(seq_list_node*)&tmp[8],0);
seq_list_insert(head,(seq_list_node*)&tmp[9],0);
//
seq_list_printf(head);
printf("seq list capacity:%d-len:%d\n",seq_list_capacity(head),seq_list_length(head));
printf("delete pos:%d\n",8);
seq_list_delete(head,8);
seq_list_printf(head);
printf("delete pos:%d\n",0);
seq_list_delete(head,0);
seq_list_printf(head);
printf("seq list capacity:%d-len:%d\n",seq_list_capacity(head),seq_list_length(head));
while(1)
{
}
}
边栏推荐
- Flink SQL knows why (13): is it difficult to join streams? (next)
- 研发团队资源成本优化实践
- PostgreSQL installation
- STM32 and motor development (from MCU to architecture design)
- Kivy教程之 如何自动载入kv文件
- Flink SQL knows why (17): Zeppelin, a sharp tool for developing Flink SQL
- Flink SQL knows why (VIII): the wonderful way to parse Flink SQL tumble window
- SQL Injection (POST/Search)
- Flink SQL knows why (19): the transformation between table and datastream (with source code)
- Comprehensive evaluation of double chain notes remnote: fast input, PDF reading, interval repetition / memory
猜你喜欢
Annotation and reflection
Resource Cost Optimization Practice of R & D team
物联网毕设 --(STM32f407连接云平台检测数据)
Flutter动态化 | Fair 2.5.0 新版本特性
JSP and filter
Kivy教程之 如何自动载入kv文件
Road construction issues
8 Queen question
[email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g"/>
Start signing up CCF C ³- [email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g
Flink SQL knows why (XIV): the way to optimize the performance of dimension table join (Part 1) with source code
随机推荐
Reptile
Comprehensive evaluation of double chain notes remnote: fast input, PDF reading, interval repetition / memory
8皇后问题
ThreadPoolExecutor realizes multi-threaded concurrency and obtains the return value (elegant and concise way)
JS convert pseudo array to array
mysql更新时条件为一查询
道路建设问题
rxjs Observable filter Operator 的实现原理介绍
静态链表(数组的下标代替指针)
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
Flink code is written like this. It's strange that the window can be triggered (bad programming habits)
PowerPoint 教程,如何在 PowerPoint 中将演示文稿另存为视频?
【被动收入如何挣个一百万】
MySQL constraints
Tutoriel PowerPoint, comment enregistrer une présentation sous forme de vidéo dans Powerpoint?
Kivy教程之 如何通过字符串方式载入kv文件设计界面(教程含源码)
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
Spark practice 1: build spark operation environment in single node local mode
Unity Render Streaming通过Js与Unity自定义通讯
2022-02-14 analysis of the startup and request processing process of the incluxdb cluster Coordinator