c语言模拟面向对象思维实现单链集合

第一步:先把头文件写好 linkedList.h
//这是头文件 struct person { int value;//记录对象 struct person * next;//指向下一个对象 }; typedef struct person p; /*addLast从最后一个处添加。 先判断头在不在, 如果头在的话,就循环判断知道找到最后一个,创建实例,添加至最后一个的后面位置处 */ void addLast(p* head,int val); //传一个头进来,便知道后面的是什么 void print(p* head); //removeFirst移除第一个,先判断第一个在不在,在的话先移除,然后再把后面的覆盖过来, //用指针的指针的原因 1因为如果用单个*传过来的参数只是值拷贝,无法对原来的头进行修改,如果用指针的指针即可对原来的头修改 void removeFirst(p** head);



复制代码第二步:linkedList.c
#include <stdio.h>
#include <stdlib.h>
#include "linkedList.h"

void addLast(p* head,int val){
    //判断头是否等于null
    if(head==NULL) return;
  //如果不等于null 创建一个新的指针对象等于头 p* current = head; //循环 while(current->next != NULL){ //判断如果叶伟栋后面有人的话,那就指向那个人,一直指直到curren->等于null current = current->next; } //创建实例 p* newPerson = malloc(sizeof(p)); //创建实例,指定内存空间 newPerson->value = val; newPerson->next = NULL; current->next = newPerson; //上面循环得到了最后的next没有人了,则addLast添加newPerson对象到最后去 } void print(p* head){ if(head==NULL) return; //没有头则返回它 p* current = head; //创建一个对象 把头赋给它 while(current != NULL){ //不等于null进入循环 printf("%d\n",current->value); //输出它的值 1 current = current->next; //指向下一个对象,把 它赋给curent 又进入while循环,不等于空又输出值2,一直循环直到等于空 } } void removeFirst(p** head){ //引用传递 ** if(*head==NULL) return;//若头等于null则说明没有头,没有头就无法确定确定下一个人,则说明没有人,返回它 p* current; //创建一个对象 if((*head)->next != NULL){ current = (*head)->next; //若叶伟栋后面有人,则不等于null,就把下一个对象赋给curren, } free((*head));//上面已经查到了叶伟栋后面有人 所以可以内存了 *head = current;//把头赋给下一个查到的对象对象 } int main(){ p* head = malloc(sizeof(p));//分配空间 head->value = 1; //值为1 head->next = NULL; //下一个对象等于NULL 等于没有下一个 终止 p* last = malloc(sizeof(p)); //分配空间 addLast(head,2); //在最后添加一个对象 printf("addLast......\n"); print(head); //输出头的值 }

posted on 2015-10-27 21:04  陈鹤  阅读(257)  评论(0编辑  收藏  举报

导航