#include <stdio.h>
#include <stdlib.h>
/*链表linklist
*链表位置都从0开始计数
*/
#define LINKLIST_TYPE char
#define CUSTOM_LINKLIST_NAME myself_linklist
struct linklist_node
{
LINKLIST_TYPE element;
struct linklist_node *next_node;
};
struct linklist
{
struct linklist_node *linklist_head;
struct linklist_node *linklist_tail;
void (*linklist_node_creat)(struct linklist * obj_linklist,LINKLIST_TYPE element);
void (*linklist_insert)(struct linklist * obj_linklist,int position,LINKLIST_TYPE element);
void (*linklist_delete)(struct linklist * obj_linklist,int position);
void (*linklist_print)(struct linklist * obj_linklist);
int (*linklist_search)(struct linklist * obj_linklist,LINKLIST_TYPE element);
};
void linklist_node_creat(struct linklist * obj_linklist,LINKLIST_TYPE element);
void linklist_insert(struct linklist * obj_linklist,int position,LINKLIST_TYPE element);
void linklist_delete(struct linklist * obj_linklist,int position);
void linklist_print(struct linklist * obj_linklist);
int linklist_search(struct linklist * obj_linklist,LINKLIST_TYPE element);
struct linklist CUSTOM_LINKLIST_NAME = {
.linklist_head=NULL,
.linklist_tail=NULL,
.linklist_node_creat=linklist_node_creat,
.linklist_insert=linklist_insert,
.linklist_delete=linklist_delete,
.linklist_print=linklist_print,
.linklist_search=linklist_search
};
void linklist_node_creat(struct linklist * obj_linklist,LINKLIST_TYPE element)
{
struct linklist_node *p_node_new = (struct linklist_node *)malloc(sizeof(struct linklist_node));
p_node_new->element = element;
p_node_new->next_node = NULL;
if(obj_linklist->linklist_head==NULL){
obj_linklist->linklist_head=p_node_new;
}else{
obj_linklist->linklist_tail->next_node=p_node_new;
}
obj_linklist->linklist_tail = p_node_new;
}
void linklist_insert(struct linklist * obj_linklist,int position,LINKLIST_TYPE element)
{
struct linklist_node * previous_node=obj_linklist->linklist_head;
int i=0;
while(i<position-1){
previous_node=previous_node->next_node;
i++;
}
struct linklist_node *p=(struct linklist_node *)malloc(sizeof(struct linklist_node));
p->element=element;
p->next_node=previous_node->next_node;
previous_node->next_node=p;
}
void linklist_delete(struct linklist * obj_linklist,int position)
{
struct linklist_node *previous_node;
previous_node = obj_linklist->linklist_head;
int i=0;
while(i<position-1){
previous_node=previous_node->next_node;
i++;
}
previous_node->next_node=previous_node->next_node->next_node;
}
void linklist_print(struct linklist * obj_linklist)
{
struct linklist_node *p_tmp;
for(p_tmp=obj_linklist->linklist_head;p_tmp!=NULL;p_tmp=p_tmp->next_node)
printf("%c",p_tmp->element);
printf("\n");
}
int linklist_search(struct linklist * obj_linklist,LINKLIST_TYPE element)
{
struct linklist_node *p_tmp;
int i=0;
for(p_tmp=obj_linklist->linklist_head;p_tmp!=NULL;p_tmp=p_tmp->next_node,i++){
if(p_tmp->element==element)
return i;
if(p_tmp->next_node==NULL){
printf("not find");
return -1;
}
}
};
int main()
{
CUSTOM_LINKLIST_NAME.linklist_node_creat(&CUSTOM_LINKLIST_NAME,'a');
CUSTOM_LINKLIST_NAME.linklist_node_creat(&CUSTOM_LINKLIST_NAME,'b');
CUSTOM_LINKLIST_NAME.linklist_node_creat(&CUSTOM_LINKLIST_NAME,'c');
CUSTOM_LINKLIST_NAME.linklist_node_creat(&CUSTOM_LINKLIST_NAME,'d');
printf("%d",linklist_search(&CUSTOM_LINKLIST_NAME,'d'));
CUSTOM_LINKLIST_NAME.linklist_delete(&CUSTOM_LINKLIST_NAME,2);
CUSTOM_LINKLIST_NAME.linklist_insert(&CUSTOM_LINKLIST_NAME,2,'u');
CUSTOM_LINKLIST_NAME.linklist_print(&CUSTOM_LINKLIST_NAME);
return 0;
}
C语言实现 链表
于 2022-05-15 00:07:36 首次发布