单链表结点读取、插入、删除操作(基本操作)-C++
2014-08-08 21:45
751 查看
线性表-LIST
概念:线性表 0个或多个数据元素的有限序列
线性表顺序存储结构:存取操作方便、插入删除操作复杂
链式存储结构 :节约空间、插入删除快速
概念 节点 数据域-指针域 单链表-单指针 头指针-头节点
概念:线性表 0个或多个数据元素的有限序列
线性表顺序存储结构:存取操作方便、插入删除操作复杂
链式存储结构 :节约空间、插入删除快速
概念 节点 数据域-指针域 单链表-单指针 头指针-头节点
//创建了含有头结点的链表 #include<iostream> using namespace std; typedef struct Node { int data; Node *next; // 相当于c语言中struct LinkNode *next }node,*linkList; //而在CPP中则不需要一直都带着struct关键字 bool getElem(linkList head,int num,int *val) //获取第num个结点的值 { node *p=head->next; int i=1; while (i<num&&p!=NULL) //1->第一个结点 2->第二个结点,发现对应关系,才好找边界 { i++; p=p->next; } if (i==num&&p!=NULL) { *val=p->data; return true; } else return false; } bool listInsert(linkList *head,int num,int val) //找到要插入点的前一个结点位置 { node *pNode=*head; // 插入特殊,有可能在头节点之后插入,保留前一个指针 int i=1; while (i<num&&pNode!=NULL) //1->head 2->第一个节点 ... { i++; pNode=pNode->next; } if (i==num&&pNode!=NULL) { node *insetNode=new node; insetNode->data=val; insetNode->next=pNode->next; pNode->next=insetNode; return true; } else return false; } bool delLinkNode(linkList *head,int val) //删除值为val的结点 { node *p=(*head)->next; //->的运算级高于* if (p==NULL) { return false; } while (p->next!=NULL&&p->next->data!=val) //找到要删除结点的前一个结点 { p=p->next; } if (p->next!=NULL&&p->next->data==val) { node *temp=p->next; p->next=p->next->next; delete temp; } return true; } bool delLinkNodeNum(linkList *head,int num) //删除第num个的结点 { node *p=*head; //->的运算级高于* if (p==NULL) { return false; } int i=1; while (p->next!=NULL&&i<num) //找到要删除结点的前一个结点 { i++; p=p->next; } if (p->next!=NULL&&i==num) { node *temp=p->next; p->next=p->next->next; delete temp; } return true; }
//带头结点的链表的创建-打印 node* creatList(int n) //尾插法 { node *head; node *last,*temp; head=new node; last=head; for (int i=0;i<n;i++) { temp=new node; temp->data=i; last->next=temp; last=temp; } last->next=NULL; return head; } node* creatListHead(int n)//头插法 { node* head=new node; head->next=NULL; node* p; for (int i=0;i<n;i++) { p=new node; p->data=i; p->next=head->next; head->next=p; } return head; } void printlinkList(linkList head) { node *p=head->next; while (p!=NULL) { cout<<p->data; p=p->next; } cout<<endl; } int listLength(linkList head) { if (head==NULL) { return 0; } node *p=head->next; int n=0; while (p!=NULL) { n++; p=p->next; } return n; } int main() { linkList linkList0=creatList(9); linkList linkList1=creatListHead(9); printlinkList(linkList0); //cout<<listLength(linkList0)<<endl; cout<<"-----------------------------"<<endl; cout<<"获得第9个结点的值:"; int num_value=0; if (getElem(linkList0,9,&num_value)) { cout<<num_value<<endl; } else cout<<"error"<<endl; cout<<"插入第10个结点:"; int data=10; if (listInsert(&linkList0,10,data)) { printlinkList(linkList0); } else cout<<"error"<<endl; cout<<"删除值为1的数:"; delLinkNode(&linkList0,1); printlinkList(linkList0); cout<<"删除第9个结点:"; delLinkNodeNum(&linkList0,9); printlinkList(linkList0); return 0; }
相关文章推荐
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 程序员面试宝典_链表基本操作,建立,求长,删除和插入特定值的结点
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 单链表的基本操作(读取、插入、删除)及优缺点总结
- 链表的相关操作查找插入删除(c++ 数据结构)
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- c++链表 建立 输入 输出 删除结点 插入结点 释放链表 的函数
- C++ 实现链表的基本操作之一:链表插入
- 链表(单双链表)用法与基本操作(构建、查找、插入、删除)实现
- 链表建立、删除、插入基本操作
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- 链表基本操作(建立、修改,插入、删除、打印)
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
- (C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
- C-链表的一些基本操作【创建-删除-打印-插入】
- 链表的基本操作(C语言版):建立,插入,删除,查找,输出
- 链表操作(插入一个结点和删除一个结点)