统计带头结点的单向链表的个数并存放在形参n所指的单元中。 欢迎评论 指点。
2012-03-19 17:12
162 查看
#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list //定义结构体 { int data; struct list *next; } SLIST; //新类型SLIST SLIST *creatlist(int *a); //函数说明 返回值为 STIST形的指针 void outlist(SLIST *); //函数说明 void fun( SLIST *h, int *n) //定义函数 参数 指向该类型的指针h、指向整形的指针n { SLIST *p; // 定义指向该类型指针变量 p *n =0; p=h->next; // p指向首元元素 while(p) //当 p 不为空时 { (*n)++; //*n 自加 p=p->next; // p后移 } } main() //主函数 { SLIST *head; //定义该指向类型的指针 head int a ={12,87,45,32,91,16,20,48}, num; //定义整形数组a、整形数num head=creatlist(a); outlist(head); //将链表的首地址给head fun(head, &num); printf("\nnumber=%d\n",num); } SLIST *creatlist(int a[])//定义函数 建立链表 返回值为SLIST类型的地址 参数为整形数组 { SLIST *h,*p,*q; int i; //定义 该类型的指针 h p q ,整形i h=p=(SLIST *)malloc(sizeof(SLIST)); //动态分配 SLIST 形空间头结点 首地址给 h、p for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); //动态分配N个SLIST型空间 q->data=a[i]; p->next=q; p=q; //给每一个date为数组元素 } p->next=0; return h; } void outlist(SLIST *h) //定义函数 形参 指向该类型的指针 { SLIST *p; 定义指向该类型的指针变量 p p=h->next; //p指向 首元元素 if (p==NULL) printf("The list is NULL!\n");//判断链表是否为空 是 打印the list is null! Else //不为空 { printf("\nHead "); // 换行 打印 head do { printf("->%d",p->data); p=p->next; } // 打印 -> date 、p后移。 while(p!=NULL); //直到 p指向尾元素的指针域 printf("->End\n"); //打印 ->end 换行 } }
相关文章推荐
- 建立一个带头结点的的单向链表并输出到out53.dat和屏幕上。各节点的值为对应的下表。链表的节点数及输出地文件名作为参数传入
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- 不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
- 不带头结点的循环单向链表
- 带头结点的单链表的插入,删除,转置,清空,判断空,统计节点数目
- 带头结点的循环单向链表
- 带头结点的单向链表
- 线性表的链式存储结构_单向链表[带头结点]_C#实现
- 带头结点的非循环单向链表
- 逆序带头结点的单向链表
- 不带头结点的单向链表排序——插入排序(C语言)
- 链表中每个结点的data域存放一个二进制位。并在此链表上实现对二进制数加1的运算。 用C语言编写 用以存放输入的二进制数 建立 一个带头结点的线性链表
- 单向不带头结点不带环的链表实现
- 单向链表逆转(带头结点)的两种方法
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 微软算法100道题------输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针
- 不带头结点的单链表的实现(C语言)
- 我的博客,游戏运维一路走来的技术统计及分享,欢迎指点
- 两个单向链表,判断它们是否相交,若相交,找出它们的第一个公共的结点
- 带头结点链表的实现