×
嵌入式 > 技术百科 > 详情

单向链表应用函数

发布时间:2020-06-15 发布时间:
|
注意:创建节点,一定要销毁节点。
 
 
#include
 
#include
 
typedef struct node{
 
       intdata;
 
       structnode *next;
 
} node_t;
 
// 创建节点函数
 
void *create(int size);
 
// 初始化链表
 
int init(node_t *head);
 
// 头插入法
 
int insert_head(node_t *head,node_t *pn);
 
// 尾插入法
 
int insert_end(node_t *head,node_t *pn);
 
// 打印所有节点内容
 
void print(node_t *head);
 
// 销毁所有节点
 
void destroy(node_t *head);
 
// 应用函数
 
// 创建长度为 len 的链表并输入内容
 
int create_link(node_t *head,int len);
 
 
 
int main()
 
{
 
       node_t*head = NULL;
 
       intlen = 0;
 
 
 
       if(init(head= create(sizeof(node_t))) != 0){
 
              printf("初始化链表失败 ");
 
              exit(0);
 
       }
 
       printf("长度:");
 
       scanf("%d",&len);
 
       create_link(head,len);
 
       print(head);
 
 
 
       destroy(head);
 
       free(head);
 
       head= NULL;
 
 
 
       return0;
 
}
 
// 创建节点函数
 
// 成功返回新节点首地址,失败返回 NULL
 
void *create(int size)
 
{
 
       returncalloc(1,size);
 
}
 
// 初始化链表
 
// 0-成功 1-失败
 
int init(node_t *head)
 
{
 
       if(NULL== head)
 
              return1;
 
       head->next= NULL;
 
 
 
       return0;
 
}
 
// 头插入法
 
// 0-成功 1-失败
 
int insert_head(node_t *head,node_t *pn)
 
{
 
       if(NULL== pn)
 
              return1;
 
       pn->next= head->next;
 
       head->next= pn;
 
 
 
       return0;
 
}
 
// 尾插入法
 
// 0-成功 1-失败
 
int insert_end(node_t *head,node_t *pn)
 
{
 
       node_t*tail = NULL;
 
 
 
       if(NULL== pn)
 
              return1;
 
       tail= head;
 
       while(tail->next!= NULL)
 
              tail= tail->next;
 
       tail->next= pn;
 
       pn->next= NULL;
 
 
 
       return0;
 
}
 
// 打印所有节点内容
 
void print(node_t *head)
 
{
 
       node_t*cur = NULL;
 
 
 
       cur= head->next;
 
       while(cur!= NULL){
 
              printf("%d",cur->data);
 
              cur= cur->next;
 
       }
 
       printf(" ");
 
}
 
// 销毁所有节点
 
void destroy(node_t *head)
 
{
 
       node_t*del =NULL,*n_node = NULL;
 
 
 
       del = head->next;
 
       while(del != NULL){
 
              n_node= del->next;
 
              free(del);
 
              del = n_node;
 
       }
 
       init(head);
 
}
 
// 应用函数
 
// 创建长度为 len 的链表并输入内容
 
// 返回创建的节点数
 
int create_link(node_t *head,int len)
 
{
 
       inti = 0;
 
       node_t*n_node = NULL;
 
 
 
       printf("输入 %d 个数: ",len);
 
       for(i= 0;i < len;i++){
 
              n_node= create(sizeof(node_t));//创建新节点
 
              if(NULL== n_node)
 
                     returni;
 
              scanf("%d",&n_node->data); // 输入数据
 
              insert_end(head,n_node);      // 插入链表
 
       }
 
 
 
       returni;
 
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA及CPLD应用领域不断拓展