单向链表应用函数

发布者:532829319hmk最新更新时间:2015-05-11 来源: 51hei关键字:单向链表  应用函数 手机看文章 扫描二维码
随时随地手机看文章
注意:创建节点,一定要销毁节点。
 
 
#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;
 
}
关键字:单向链表  应用函数 引用地址:单向链表应用函数

上一篇:C语言随机函数
下一篇:构建一个完整的life结构程序框架

推荐阅读最新更新时间:2024-03-16 14:01

函数指针数组在ARM异常中断处理中的应用
介绍一种简洁、高效、灵活的ARM异常中断处理方法。 在ARM中,由于所有的中断都使用同一个异常中断入口地址,即0x00000018。因此需要在异常中断处理程序中根据相应的中断号调用对应的中断服务函数。 一般有两种处理方式: 1. 在汇编中保存现场,然后调用C语言编写的中断处理程序,任务处理完成之后,再返回到汇编中恢复现场,并返回到断点。其中C语言编写的中断处理程序,通过switch语句对INTOFFSET进行判断,然后散转执行对应的服务函数。 IMPORT IRQ_EXCEPTION 0x00000018 LDR PC,=IRQ_E
[单片机]
C51单片机中断函数的定义及应用
C51函数声明对ANSI C作了扩展,具体包括: 1.中断函数声明: 中断声明方法如下: void serial_ISR () interrupt 4 [using 1] { /* ISR */ } 为提高代码的容错能力,在没用到的中断入口处生成iret语句,定义没用到的中断。 /* define not used interrupt, so generate “IRET” in their entrance */ void extern0_ISR() interrupt 0{}/* not used */ void timer0_ISR () interrupt 1{}/* not used */ void extern1_IS
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved