(2010计本3班-杨蒙)面向对象的C--实现链表操作
来源:互联网 发布:实体渠道 数据分析 编辑:程序博客网 时间:2024/05/16 00:56
2010计本3班-杨蒙-面向对象的C--实现链表操作
ym@ubuntu:~/桌面$ gedit student.c
ym@ubuntu:~/桌面$ indent -kr -i8 student.c
ym@ubuntu:~/桌面$ gcc student.c
ym@ubuntu:~/桌面$ ./a.out
ym@ubuntu:~/桌面$ gedit student.c
点击(此处)折叠或打开
- /*
- * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化
- * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法
- * 其他的程序调用op类,实现对表链表的操作
- * 链表包括
- * 面向对象,简单易学程序更加紧凑,更加健壮,更安全
- */
- #include<string.h>
- #include<stdlib.h>
- #include<stdio.h>
- #define ok 1
- #define err 0
- #define null NULL
- #define len sizeof(struct student) //结构体student 的长度
- #define llen sizeof(struct Op) //结构体op 的长度
- /*
- * c语言中的结构体,包括3个简单的数据类型,
- * 面向对象中的类,包括3个属性
- */
- struct student {
- char *name;
- int age;
- struct student *next;
- };
- /*
- * 实现类op,op包含了所有的对链表操作的方法
- * 对数据及方法的封装,有保护数据的功能
- */
- struct Op {
- int l; //记录链表的长度
- int (*sinit) (struct student * *s); //初始化一个链表
- int (*Free) (struct student * *s); //销毁一个链表
- int (*selects) (struct student * *s); //遍历一个链表
- int (*add1) (struct student * *s, struct student * *stu, int i); //增加一个节点
- int (*add2) (struct student * *s, char *name, int age, int i);
- //初始化一个链表节点
- struct student *(*getstudent) (char *name, int age);
- //更新一个链表节点
- struct student *(*updateage) (struct student * *s, int age, int i);
- struct student *(*updatename) (struct student * *s, char *name,
- int i);
- struct student *(*updates) (struct student * *s, char *name,
- int age, int i);
- //删除一个链表节点
- struct student *(*deletes) (struct student * *s, int i);
- };
- struct Op *op; //声明一个op类
- int main()
- {
- struct student *p;
- init(&op); //初始化一个链表节点
- (*(op->sinit)) (&p); //调用op类实现初始化一个链表的头节点
- (*(op->add2)) (&p, "ym", 24, 1); //调用op类实现添加为链表一个节点
- (*(op->add2)) (&p, "ym", 25, 1);
- printf("---------------------------------------\n");
- (*(op->selects)) (&p); //调用op类 遍历链表
- (*(op->updates)) (&p, "ym123", 100, 1); //调用op类 更新一个节点
- printf("---------------------------------------\n");
- (*(op->selects)) (&p);
- (*(op->deletes)) (&p, 2); //调用op类 删除一个节点
- printf("---------------------------------------\n");
- (*(op->selects)) (&p);
- (*(op->Free)) (&p); //调用op类 销毁链表
- return ok;
- }
- //一下内容可以包含在一个头文件中
- /*
- * 初始化一个链表节点 并为链表节点赋值
- * @return 返回一个链表节点 这个节点就是以name和age 为属性的student节点
- * @param name age student 的两个属性
- */
- struct student *getstudent(char *name, int age)
- {
- struct student *p;
- (*(op->sinit)) (&p); //初始化一个链表的节点
- p->name = name;
- p->age = age;
- return p;
- }
- /*
- * 初始化一个op类
- * 并对op的方法进行封装
- */
- int init(struct Op * *op)
- {
- //声明链表的操作方法,即链表的增 删 改 查 销毁 初始化
- struct student *deletes(struct student * *s, int i);
- struct student *updates(struct student * *s, char *name, int age,
- int i);
- struct student *updateage(struct student * *s, int age, int i);
- struct student *updatename(struct student * *s, char *name, int i);
- struct student *getstudent(char *name, int age);
- int add1(struct student * *s, struct student * *stu, int i);
- int add2(struct student * *s, char *name, int age, int i);
- int selects(struct student * *s);
- int sinit(struct student * *s);
- int Free(struct student * *s);
- *op = (struct Op *) malloc(llen);
- //对链表的所有的操作进行封装
- (*op)->l = 0; //对属性l封装
- (*op)->sinit = sinit;
- (*op)->Free = Free;
- (*op)->selects = selects;
- (*op)->add1 = add1;
- (*op)->add2 = add2;
- (*op)->getstudent = getstudent;
- (*op)->updateage = updateage;
- (*op)->updatename = updatename;
- (*op)->updates = updates;
- (*op)->deletes = deletes;
- return ok;
- }
- /*
- * 删除一个链表节点
- * 并返回删除前的链表节点
- */
- struct student *deletes(struct student * *s, int i)
- {
- struct student *p, *student;
- p = *s;
- if (i > op->l || i < 0) {
- printf("请输入正确的数据!\n");
- return null;
- }
- int j = 0;
- for (; j < i - 1; j++) {
- p = p->next;
- }
- student = p->next;
- p->next = p->next->next;
- op->l--;
- return student;
- }
- /*
- * 更新链表的数据
- * 返回更新前的链表
- */
- struct student *updates(struct student * *s, char *name, int age, int i)
- {
- struct student *p;
- (*(op->updateage)) (s, age, i);
- p = (*(op->updatename)) (s, name, i);
- return p;
- }
- /*
- * 更新链表的数据
- * 返回更新前的链表
- */
- struct student *updateage(struct student * *s, int age, int i)
- {
- struct student *p, *student;
- p = *s;
- if (i <= 0 || i > op->l) {
- printf("请检查你的数据!\n");
- return null;
- }
- int j = 0;
- for (; j != i; j++) {
- p = p->next;
- }
- student = p;
- p->age = age;
- return student;
- }
- /*
- * 更新链表的数据
- * 返回更新前的链表
- */
- struct student *updatename(struct student * *s, char *name, int i)
- {
- struct student *p, *student;
- p = *s;
- if (i <= 0 || i > op->l) {
- printf("请检查你的数据!\n");
- return null;
- }
- int j = 0;
- for (; j != i; j++) {
- p = p->next;
- }
- student = p;
- p->name = name;
- return student;
- }
- /*
- * 增加一个链表节点
- */
- int add2(struct student * *s, char *name, int age, int i)
- {
- struct student *p;
- p = (*(op->getstudent)) (name, age);
- (*(op->add1)) (s, &p, i);
- }
- /*
- * 增加一个链表节点
- */
- int add1(struct student * *s, struct student * *stu, int i)
- {
- struct student *p;
- p = *s;
- if (i > op->l + 1 || i < 0) {
- printf("请检查你的输入!\n");
- return err;
- }
- op->l++;
- int j = 0;
- for (; j < i - 1; j++) {
- p = p->next;
- }
- (*stu)->next = p->next;
- p->next = *stu;
- return ok;
- }
- /*
- * 初始化一个链表
- */
- int sinit(struct student * *s)
- {
- (*s) = (struct student *) malloc(len);
- (*s)->name = "yangmeng";
- (*s)->age = 23;
- (*s)->next = null;
- return ok;
- }
- /*
- * 遍历一个链表
- */
- int selects(struct student * *s)
- {
- struct student *p;
- p = *s;
- while (p) {
- printf("%s %d\n", p->name, p->age);
- p = p->next;
- }
- return ok;
- }
- /*
- * 销毁链表
- * 可以用void 代替 struct student 实现对所有的结构体销毁
- */
- int Free(struct student * *s)
- {
- free(*s);
- return ok;
- }
ym@ubuntu:~/桌面$ indent -kr -i8 student.c
ym@ubuntu:~/桌面$ gcc student.c
ym@ubuntu:~/桌面$ ./a.out
点击(此处)折叠或打开
- /*
- * 详细运行过程: 本程序实现的是对链表的简单的操作,即链表的增 删 改 查 销毁 初始化
- * 运用面向对象的思想,实现一个类op,op中包括了所有的链表操作方法
- * 其他的程序调用op类,实现对表链表的操作
- * 链表包括
- * 面向对象,简单易学程序更加紧凑,更加健壮,更安全
- */
- ---------------------------------------
- yangmeng 23
- ym 25
- ym 24
- ---------------------------------------
- yangmeng 23
- ym123 100
- ym 24
- ---------------------------------------
- yangmeng 23
- ym123 100
- ym@ubuntu:~/桌面$
0
上一篇:那些年你用过的工具--网络工具Wireshark经验谈
下一篇:《嵌入式开发》实验项目
相关热门文章
- 关于ip_conntrack跟踪连接满导...
- 我的第一个python程序之续集...
- 我的第一个python程序
- 欢迎实现一个梦在ChinaUnix博...
- redis与mysql数据同步
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- (2010计本3班-杨蒙)面向对象的C--实现链表操作
- 《Beginning C# Objects》一本面向对象入门的好书
- c实现面向对象
- c实现面向对象
- c实现面向对象
- c实现面向对象
- C实现面向对象
- C实现面向对象
- C实现面向对象
- 循环队列的面向对象实现(C++)
- c分析面向对象的实现技术
- C语言面向对象的实现
- C实现面向对象的继承
- C语言面向对象的实现---多态性
- C语言实现面向对象的思想
- 面向对象(实现相应功能操作)
- C语言实现面向对象风格带迭代器的双向链表
- 实现日期类的一些计本运算
- 正则表达式,验证文件上传类型
- Top 125 Network Security Tools
- 【C语言】 单链表的实现 用malloc实现的动态内存管理
- 那些年你用过的工具--网络工具Wireshark经验谈
- IOS实现一个简单的浏览器
- (2010计本3班-杨蒙)面向对象的C--实现链表操作
- oracle数据库各版本下载地址
- adb shell input text 输入特殊字符 &
- 《嵌入式开发》实验项目
- 宏:整数常量 O_ACCMODE
- awk 删除文本文件换行符
- 嵌入式系统实用教程
- 嵌入式系统开发实用教程
- 内核社区的中心是内核邮件列表(Linux Kernel Mailing List,LKML)
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
烧鹅炉
多功能煮面炉
拖挂房车
蒸肠粉机
碳烤炉
全自动煎饼机
电饼铛机器
环艺
燃气蒸炉
萨塔
火枫
无气喷涂机配件
果碳烤鸭
喷涂机配件
铝锅
扒炉
蒸粉机
液化气罐
烧烤锅
电炸锅油炸锅
麻辣烫机
devilbiss自动喷枪
阿耐思特岩田喷枪
喷铁氟龙
小型喷砂枪
喷沙泉
外墙喷沙多少钱一平方
喷沙墙面图片
喷沙
喷沙效果图
松花石喷沙
喷油加工厂
自动喷油机
无尘喷油房
喷油嘴漏油
喷油螺杆空气压缩机
喷油设备
喷油
喷油器
6000元以上塑胶喷油工
西湖喷泉