您的位置:首页 > 编程语言 > C语言/C++

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

2015-10-27 21:04 302 查看
第一步:先把头文件写好 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); //输出头的值

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: