代码解析
代码
代码如下:
#include <stdlib.h> #include <stdio.h> typedef struct node { int data; struct node *next; }linknode; /*定义结点的类型*/ typedef linknode *linklist; /*定义指针的别名,后面可以用linklist创立指针*/ /*尾插法创建带头结点的单链表*/ /*尾插法就是在结点后不断插入新的结点*/ /*代码用了双指针法*/ linklist creatlinklist() { linklist head,r,s; int x; head=r=(linklist)malloc(sizeof(linknode)); printf("\n请输入一组以0结束的整数序列:\n"); scanf("%d",&x); while (x) { s=(linklist)malloc(sizeof(linknode)); s->data=x; r->next=s; r=s; scanf("%d",&x); } r->next=NULL; return head; } /*输出带头结点的单链表*/ void print(linklist head) { linklist p; p=head->next; printf("单链表如下:\n"); while(p) { printf("%5d",p->data); p=p->next; } printf("\n"); } /*计算单链表的结点个数*/ int count(linklist head) { int c=0; linklist p=head; while (p) {c++; p=p->next; } return c; } /*计算单链表中带头结点的结点个数*/ int countofhead(linklist head) { int c=0; linklist p=head->next; while (p) {c++; p=p->next; } return c; } int main() /*测试函数*/ { linklist head; head=creatlinklist(); print(head); printf("\n单链表中结点的个数是:%d",count(head)); printf("\n单链表中带头结点的结点个数是:%d\n",countofhead(head)); }
实现代码结果
代码模块
代码模块部分如下:
第一部分是写结点类型并定义指针的别名
typedef struct node { int data; struct node *next; }linknode; typedef linknode *linklist;
也可以把*linklist放到linknode后
第二部分是用尾插法创捷带头结点的单链表
linklist creatlinklist() { linklist head,r,s; int x; head=r=(linklist)malloc(sizeof(linknode)); printf("\n请输入一组以0结束的整数序列:\n"); scanf("%d",&x); while (x) { s=(linklist)malloc(sizeof(linknode)); s->data=x; r->next=s; r=s; scanf("%d",&x); } r->next=NULL; return head; }
过程图示如下:
第三部分是输出带头结点的单链表
void print(linklist head) { linklist p; p=head->next; printf("单链表如下:\n"); while(p) { printf("%5d",p->data); p=p->next; } printf("\n"); }
第四部分是两个模块,第一个模块是计算单链表的结点个数,第二个模块是计算带头结点的单链表的个数
/*计算单链表的结点个数*/ int count(linklist head) { int c=0; linklist p=head; while (p) {c++; p=p->next; } return c; } /*计算单链表中带头结点的结点个数*/ int countofhead(linklist head) { int c=0; linklist p=head->next; while (p) {c++; p=p->next; } return c; }
需要注意的是,单链表的结点个数是10,而带头结点的单链表个数是9,这是因为计算单链表的结点个数是从头结点开始计算的,而计算带头结点的单链表是从第一个结点开始计算的
第五部分就是测试这个函数了
int main() { linklist head; head=creatlinklist(); print(head); printf("\n单链表中结点的个数是:%d",count(head)); printf("\n单链表中带头结点的结点个数是:%d\n",countofhead(head)); return 0; }
本题涉及到了怎么创建单链表,对单链表的结点进行计算这两个问题
如对读者有帮助,作者不胜感激