面试题1:单链表的初始化、测长
2016-03-25 21:23 Keiven_LY 阅读(862) 评论(0) 编辑 收藏 举报单链表结点的结构体表示
typedef struct node { int data; struct node *next; }Node, *LinkList; /* *********结构体定义的理解 ************ */ /* 这里的Node是结构体struct node的一个别名 */ /* 这里的*LinkList也是结构体struct node的一个别名 */ /* 换言之LinkList是结构体struct node类型的指针的别名 */ /* 也就是说struct node *p;这条语句等同于LinkList p; */ /* LinkList *L相当于struct node **L,是二级指针,如: int i; int *pi = &i; //这里定义了一个指向整型i的指针pi, &表示取地址符号 int **ppi = π //ppi就是一个二级指针,其指向指针pi的地址 */
单链表初始化的功能函数
/* *********初始化单链表表 ************ */ /* 初始化成功返回1,初始化失败返回0 */ int InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */ /* 此处返回给L的是一个指针,并且赋给了头指针 */ /* *L其实就是头结点,L则为头指针 */ if(!(*L)) /* 存储分配失败 */ { return 0; } (*L)->next=NULL; /* 指针域为空 */ return 1; }
单链表测长的功能函数
/* 初始条件:单链表表L已存在。操作结果:返回L中数据元素个数 */ int ListLength(LinkList L) { int num=0; LinkList p=L->next; /* p指向第一个结点 */ while(p) { num++; p=p->next; } return num; }
完整的可执行程序如下:
#include<iostream> using namespace std; typedef struct node { int data; struct node *next; }Node, *LinkList; /* *********结构体定义的理解 ************ */ /* 这里的Node是结构体struct node的一个别名 */ /* 这里的*LinkList也是结构体struct node的一个别名 */ /* 换言之LinkList是结构体struct node类型的指针的别名 */ /* 也就是说struct node *p;这条语句等同于LinkList p; */ /* LinkList *L相当于struct node **L,是二级指针,如: int i; int *pi = &i; //这里定义了一个指向整型i的指针pi, &表示取地址符号 int **ppi = π //ppi就是一个二级指针,其指向指针pi的地址 */ /* *********初始化单链表 ************ */ /* 初始化成功返回1,初始化失败返回0 */ int InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */ /* 此处返回给L的是一个指针,并且赋给了头指针 */ /* *L其实就是头结点,L则为头指针 */ if(!(*L)) /* 存储分配失败 */ { return 0; } (*L)->next=NULL; /* 指针域为空 */ return 1; } /* 初始条件:单链表表L已存在。操作结果:返回L中数据元素个数 */ int ListLength(LinkList L) { int num=0; LinkList p=L->next; /* p指向第一个结点 */ while(p) { num++; p=p->next; } return num; } int main() { LinkList L; int n; //存放链表结点个数 n=InitList(&L); cout << "链表L初始化完毕,ListLength(L)= " << ListLength(L) <<endl; system("pause"); return 0; }
运行结果: