数据结构(链表)

该博客主要展示了用C语言实现链表操作的代码。包括链表节点和链表结构的设计,以及创建、销毁链表,头部、尾部和指定位置添加、删除节点等操作,还涉及链表的遍历和排序,最后在主函数中进行了简单测试。

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define TYPE int

//设计链表节点
typedef struct Node
{
TYPE data;
struct Node* next;
}Node;
//创建节点
Node* create_node(TYPE data)
{
Node* node=malloc(sizeof(Node));
node->data=rand()%100;
node->next=NULL;
}
//设计链表结构
typedef struct List
{
Node* head;
Node* tail;
size_t size;
}List;

//创建链表
List* create_list(void)
{
List* list=malloc(sizeof(List));
list->head=NULL;
list->tail=NULL;
return list;
}
//销毁链表
void destory_list(List* list);
//头部添加
void add_head(List* list,TYPE data)
{
Node* node=create_node(data);
if(list->size0)
{
list->head=node;
list->tail=node;
}
else
{
node->next=list->head;
list->head=node;
}
list->size++;
}
//尾部添加
void add_tail(List* list,TYPE data)
{
Node* node=create_node(data);
if(list->size
0)
{
list->head=node;
list->tail=node;
}
else
{
list->tail->next=node;
list->tail=node;
}
list->size++;
}
//指定位置添加
bool add_index_list(List* list,int index,TYPE data)
{
if(index<0||index>=list->size) return false;
if(0index)
{
add_head(list,data);
}
else
{
Node* prev =list->head;
Node* node=create_node(data);
for(int i=0;i<index;i++)
{
prev =prev->next;
}
node->next=prev->next;
prev->next=node;
list->size++;
}
return true;
}
//头删除
bool del_head_list(List* list)
{
if(list->size
0) return false;
Node* node=list->head;
if(list->size1)
{
node =list->head;
list->head=NULL;
list->tail=NULL;
}
else
{
list->head=node->next;
}
free(node);
list->size–;
return true;
}
//尾删除
bool del_tail_list(List* list)
{
if(list->size
0) return false;
Node* node=list->tail;
if(list->size1)
{
list->head=NULL;
list->tail=NULL;
}
else
{
for(node=list->head;list->tail!=node->next;node=node->next);
list->tail=node;
list->tail->next=NULL;
node=node->next;
}
free(node);
list->size–;
return true;
}
//指定位置删除
bool del_index_list(List* list,int index,TYPE data)
{
if(index<0||index>=list->size) return false;
if(0
index)
del_head_list(list);
if(list->size-1==index)
return del_tail_list(list);
Node* prev=list->head;
for(int i=0;i<index-1;i++)
{

   prev=prev->next;
}
Node* node=prev->next;
prev->next=node->next;
free(node);
list->size--;
return true;

}
//遍历
void show_list(List* list)
{
for(Node* node=list->head;NULL!=node;node=node->next)
{
printf("%d “,node->data);
}
printf(”\n");
}
/排序
Node
sort_node(Node* node)
{
if(NULL==list) return list;
Node *temp=NULL;

}/
int main()
{
List
list=create_list();
Node* node=list->head;
for(int i=0;i<10;i++)
{
add_tail(list,i);
}
sort_list(list);
show_list(list);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值