C++第十四天笔记2016年03月10日(周四) A.M

1. 线性结构:链表和数组

数组:可以访问任意位置的元素。添加删除操作相对麻烦。

链表:添加删除效率相对较高。只能从第一个元素开始访问。

访问较多:数组。添加删除较多:链表。

数组:元素类型 数组名[元素个数];

2.  如何创建链表:

链表:链表中的每一个元素称为节点。

节点:数据域(存储数据)和指针域(存储下一节点的地址编号)。

3.  双向链表:数据域和指针域(包含两个,其中一个指向下一个节点,另外一个指向上一个节点)

4.  头结点:链表中的第一个节点

空链表:链表中无任何节点。

  1 #include <iostream>
  2 #include "stdio.h"
  3 #include "stdlib.h"
  4 #include "cstring"
  5 using namespace std;
  6
  7 #define N 10
  8 //创建节点
  9 typedef struct Node{
 10
 11     char name[20];
 12     int age;
 13     struct Node* link;
 14 }Student;
 15
 16 Student* createList(int n)
 17 {
 18     Student* head = NULL; //头节点
 19     Student* pNode = NULL; //动态节点
 20     Student* sNode = NULL; //每次创建新的节点
 21     if ((head = (Student*)malloc(sizeof(Student))) == NULL)
 22     {
 23         printf("Fail...\n");
 24         return NULL;
 25     }
 26     //头节点初始化
 27     strcpy(head->name, "HeadNode");
 28     head->age = 25;
 29     head->link = NULL;
 30     //动态节点指向头节点:
 31     pNode = head;
 32     for (int i=0; i < n-1; ++i)
 33     {
 34         if ((sNode = (Student*)malloc(sizeof(Student))) == NULL)
 35         {
 36             printf("Fail...\n");
 37             return NULL;
 38         }
 39         //节点指针指向下一个节点
 40         pNode->link = sNode;
 41         cout << "Name:" ;
 42         cin >> sNode->name;
 43         cout << "Age:";
 44         cin >> sNode->age;
 45         sNode->link = NULL;
 46         pNode =sNode;
 47     }
 48     return head;
 49 }
 50 //链表打印
 51 void showNode(Student* head)
 52 {
 53     Student* pNode;
 54     pNode = head;
 55     while (pNode != NULL) {
 56         cout << "*******************************\n";
 57         cout << "Name:" << pNode->name;
 58         cout << " Age:" << pNode->age;
 59         cout << "\n";
 60         pNode = pNode->link;
 61     }
 62 }
 63 //链表回收
 64 void freeList(Student* h){
 65
 66     while (h != NULL)
 67     {
 68         Student* p;
 69         h = h->link;
 70         free(p);
 71         p = h;
 72     }
 73
 74 }
 75
 76 //插入节点
 77 void insertNode(Student* pNode)
 78 {
 79     Student* sNode =  (Student*)malloc(sizeof(Student));
 80     cout << "please input the insertNode information\n";
 81     cout << "Name:" ;
 82     cin >> sNode->name;
 83     cout << "Age:";
 84     cin >> sNode->age;
 85     sNode->link = pNode->link;
 86     pNode->link = sNode;
 87 }
 88 //查询节点
 89 Student* searchNode(Student* head, char* name)
 90 {
 91     Student* pNode = head;
 92     while (pNode != NULL) {
 93         if (strcmp(pNode->name, name) == 0) {
 94             return  pNode;
 95         }
 96         pNode = pNode->link;
 97     }
 98     return pNode;
 99 }
100
101 Student* deleteNode(Student* head, char* name)
102 {
103     if (head == NULL) {
104         return NULL;
105     }
106     Student* p1 = head;
107     Student* p2 = head->link;
108
109     //判断删除的是否是头节点
110     if (strcmp(p1->name, name) == 0) {
111         head = head->link;
112         free(p1);
113         return head;
114     }
115
116     //判断删除后面的节点
117     while ( p2 != NULL)
118     {
119         if (strcmp(p2->name, name) == 0)
120         {
121             p1->link = p2->link;
122             free(p2);
123             return head;
124         }
125         p1 = p2;
126         p2 = p2->link;
127     }
128     return head;
129 }
130
131 int main(int argc, const char * argv[])
132 {
133     Student* head =  createList(4);
134     Student* sNode = searchNode(head, "b");
135     insertNode(sNode);
136     showNode(head);
137     deleteNode(head,"b");
138     cout<< "\n删除名字为b的节点后链表为:\n";
139     showNode(head);
140     freeList(head);
141     return 0;
142 }

时间: 2024-12-18 08:33:13

C++第十四天笔记2016年03月10日(周四) A.M的相关文章

OC第四天笔记2016年03月18日(周五)A.M

在OC中没有多继承 继承方式公有继承:派生类对象可以当做基类对象来使用 类中实例变量的默认权限为受保护,方法默认权限公有. 类中方法都是虚方法 在OC继承中,基类的所有成员都可以被派生类继承. 在派生类中定义一个原型和基类相同的方法,称派生类重写了此方法. id代表任意类型, 在程序运行期间才会确定id所代表的类型. 使用类方法创建的对象会被自动放入“自动释放池”中,所以不需要再手动release. 派生类中扩展实例变量时,不能与基类部分实例变量同名.

linux十四周二次课(5月10日)笔记

十四周二次课(5月10日)14.4 exportfs命令14.5 NFS客户端问题15.1 FTP介绍15.2/15.3 使用vsftpd搭建ftp 14.4 exportfs命令 如果远程客户端正在使用nfs服务,正在挂载着.如果服务端停止NFS服务,远程的客户端会挂起. A共享一个目录,B往里面写或读文件.如果A停掉了NFS,B就不能读写.如果B读写很频繁,就会导致读写共享文件的进程,比如PHP挂起.会导致进程异常,甚至把机器搞死.A不能随便重启,需要把B和C挂载的目录先卸载下来. 卸载掉挂

C++第四天笔记2016年01月29日(周五)A.M

1.   类的静态成员 静态局部变量: (1)    静态局部变量的空间并非在栈区. (2)    静态局部变量可以保留上一次函数调用时的计算结果,这与全局变量很相似,但是静态局部变量只能在当前函数体内可见. (3)    静态局部变量如果未进行初始化,会被编译器初始化为0. 静态变量的声明只会执行一次,以保证static静态变量只有一块空间 静态成员变量的初始化放在类定义之外单独做初始化,基本格式:类型 类名: : 静态成员变量名 例: int Employee::next_id = 0;//

Linux学习笔记十四周二次课(5月10日)

14.4 exportfs命令 #exportfs -arv //重新挂载 #vim /etc/exports /tmp/192.168.133.0/24(rw,sync,no_root_squash) 14.5 NFS客户端问题 #mount -t nfs -o nfsvers=3 192.168133.130:/tmp/ /mnt/ 指定版本为3,重新挂载 #mount -t nfs -oremount,nfsvers=3 192.168133.130:/tmp/ /mnt/ #vim /e

OC第七天笔记2016年03月22日(周二)A.M

1. 可变字符串 NSMutableString* mstr = [[NSMutableString alloc] initWithCapacity:10]; 增 删 改 替换 //[mstr length] [mstr insertString:@"http://" atIndex:0]; //第一个参数:即将要插入的字符串 //第二个参数:插入的位置(下标) NSLog(@"%@",mstr); //http://www.baidu.com [mstr inse

iPhone 第一天笔记2016年03月28日(周一)A.M iPhone开发入门

1. 切换home键:command + shift + h; 2. info.plist  Application does not run in background -> YES ****************************main****************************** 1 <font size="3">#import <UIKit/UIKit.h> 2 #import "AppDelegate.h&quo

OC第六天笔记2016年03月21日(周一)A.M

在OC中,我们通过使用协议和分类来实现多继承的效果. 协议只能声明方法,而不能有任何实例变量. 声明协议: @protocal protocolName<protocol ,…> @optional //可选择的 @require//必须的  默认 @end eg: 1 @protocal rules<NSObject > 2 3 4 5 @interface abc: NSObject <rules> 6 7 @end //协议中只有方法声明,没有实例变量 在类中的实

OC第七天笔记2016年03月21日(周一)P.M

1. 使用NsCompare 或者isEqualToNumber来实现NsNumber对象的比较. NsCompare:比较大小关系 isEqualToNumber:是否相等 长度:[str length] 查找子串: NSRange rr = [str rangeOfString:@”ll”]; If(rr.location == NSNotFound){ NSLog(@”ll is not in str ”); } else { NSLog(@”ll is in str”);}

OC第八天笔记2016年03月23日(周三)A.M

1.     NSFileManager: ----------------------main--------------------------- 1 <font size="3">#import <Foundation/Foundation.h> 2 #import "Student.h" 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 6 //1.