C++课件:在结点后插入操作与面向对象编程基础

需积分: 14 26 下载量 77 浏览量 更新于2024-08-23 收藏 4.4MB PPT 举报
该文档是东南大学C++课程的一部分,由何洁月教授主讲,主要针对C++语言的学习和应用。课程内容涵盖了计算机程序设计的基础理论、C++语言的核心概念以及面向对象编程的各个方面。 在"在结点之后插入一个结点p"这一部分,重点介绍了如何在已有的线性数据结构(如链表)中,通过Node<T>类的InsertAfter方法将新节点p插入到现有节点next之后。这个函数的工作原理是首先将p节点的next指针设置为当前节点的后继,然后将当前节点的next指针更新为p,实现了节点的插入操作。这种技术在数据结构中非常常见,用于动态地扩展和修改数据结构。 课程大纲涉及多个章节,包括: 1. 计算机程序设计语言发展概述,介绍不同类型的编程语言及其历史,以及面向对象方法的基本概念和软件开发流程。 2. C++语言的简要介绍,强调其基本语法、数据类型、表达式、输入输出和算法控制结构的理解和掌握。 3. 函数相关知识,包括函数定义、使用、内联函数、默认参数、函数重载、模板等,以及利用C++系统函数的能力。 4. 面向对象编程深入讲解,包括面向对象思想、程序设计特点、类和对象的概念、构造函数和析构函数、类的组合、类模板,以及面向对象标记的概述。 5. 课程的最后一章可能聚焦于更高级的主题,如特定的类设计或面向对象编程实践应用。 通过这个课程,学生旨在建立基本的计算机程序设计概念,掌握C++语言并逐渐提升编程和调试能力,为后续学习打下坚实的基础。何洁月老师的授课风格注重理论与实践相结合,使学生能够熟练运用C++进行实际编程项目。

优化这段代码的运行时间#include<stdio.h> #include<stdlib.h> typedef struct node* DNode; struct node { int data; DNode prior; //前面数据地址 DNode next; //后面数据地址 }; //创建双向链表 void CreatNode(DNode *head) { DNode s; //新节点指针 char e; (*head) = (DNode)malloc(sizeof(struct node));//头结点 (*head)->prior = (*head); //初始头结点的前驱和后驱都指向自己 (*head)->next = (*head); printf("输入数据\n"); scanf("%c", &e); while (e!='\n') { s = (DNode)malloc(sizeof(struct node)); //新节点分配空间 s->data = e; s->prior = (*head); //新节点的prior连前一个结点 s->next = (*head)->next; //新节点的next连后边结点 (*head)->next->prior = s; //后一个结点的prior连新结点 (*head)->next = s; //新节点前面的next连新结点 scanf("%c", &e); } } //向后遍历输出 void PrintList1(DNode L) { DNode p; p = L; p = p->next; while (p != L) { printf("%c", p->data); p = p->next; } printf("\n"); } //向前遍历输出 void PrintList2(DNode L) { DNode p; p = L->prior; while (p != L) { printf("%c", p->data); p = p->prior; } printf("\n"); } //查找第i处数据的地址 DNode FindPosition(DNode L,int i) { int j = 0; DNode p = L; while (p->next != L&&j < i) { p = p->next; j++; } return p; } //插入 void InsertList(DNode L) { DNode s,p; //s为新结点 p为新节点前一个结点 int i; char e; printf("在第几处插入:\n"); scanf("%d", &i); getchar(); printf("插入什么数据:\n"); scanf("%c", &e); p = FindPosition(L, i-1); //新节点前一个结点地址 s = (DNode)malloc(sizeof(struct node));//申请新节点空间 s->data = e; s->prior = p; //新节点的prior连上前一个结点 s->next = p->next; //新节点的next连上后一个结点 p->next->prior = s; //新节点后的结点的prior连上新结点 p->next = s; //新节点前的结点的next连上新结点 } //删除 void DeleteList(DNode L){ DNode s,p; //s为新结点 p为要删除的结点 int i; printf("删除第几处的数据:\n"); scanf("%d", &i); p = FindPosition(L, i); //要删除结点的地址 p->prior->next = p->next; //要删除的结点的前一个结点的next,连上要删结点后的结点 p->next->prior = p->prior;//要删除结点的后一个结点的prior,连上要删结点的前一个结点 free(p); } int main() { DNode list; CreatNode(&list); //PrintList1(list); PrintList2(list); InsertList(list); PrintList2(list); DeleteList(list); PrintList2(list); }

2023-03-22 上传