数据结构之—线性表之—浅谈单链表有头结点和无头节点
来源:互联网 发布:化妆品可以去淘宝买吗 编辑:程序博客网 时间:2024/04/27 15:30
有头结点的链表统一了算法的实现,无头节点减少了节点个数,但是只有根据实际情况选用真正的有无头节点链表
待续://代码实现
待续://代码实现
待续://代码实现
/********************************************************************** * Copyright (c)2015,WK Studios * Filename: Node.h* Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 26 4 ************************************************************************/ #ifndef _NODE_H_#define _NODE_H_#include<iostream>using namespace std;#define ElemType inttypedef struct Node{ ElemType data; struct Node *next;}Node,*Node_List;//1.头插法初始化无头结点链表(改变节点数据或者指针必须给函数传入该变量的地址)void Init_Node_List_No_HeadInsert(Node **head);//Init_Node_List(Node *&L)或者Init_Node_List(Node_List &L)//2.尾插法初始化无头结点链表(改变节点数据或者指针必须给函数传入该变量的地址)void Init_Node_List_No_BackInsert(Node **head);//Init_Node_List(Node *&L)或者Init_Node_List(Node_List &L)//3.1显示有有结点链表数据void Show_Node_List_HaHead(Node *L);//无需改变指针L所以值传递//3.2显示有无结点链表数据void Show_Node_List_NoHead(Node_List L);//无需改变指针L所以值传递//4.尾插法初始化有头结点链表void Init_Node_List_Have_BackInsert(Node **head); //对于有头节点的头节点所指向的位置不变可以用//5.头插法初始化有头结点链表void Init_Node_List_Have_HeadInsert(Node **head);#endif
/********************************************************************** * Copyright (c)2015,WK Studios * Filename: Node.cpp * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 26 4 ************************************************************************/ #include"Node.h"//1.头插法初始化无头结点链表void Init_Node_List_No_HeadInsert(Node **head)//Init_Node_List(Node *&L)或者Init_Node_List(Node_List &L){Node *p,*t; //t工作指针,p临时指针*/int i=1,a;cout<<"please input datas (end of -1):";while(cin>>a,a!=-1)//while(scanf("%d",&a)){ if(a){t=(Node *)malloc(sizeof(Node));//建立第一个节点 if(!t) { cout<<"申请内存失败\n"; exit(0); } t->data=a;if(i==1){t->next=NULL;//第一个节点指针置空,其实就是最后一个节点}else{t->next=p;}p=t;}i++;//记录节点数}if(i==1)//如果没有输入节点数据并且输入-1结束{exit(0);}*head=t;//头指针指向最前面的节点} //2.尾插法初始化无头结点链表void Init_Node_List_No_BackInsert(Node **head)//Init_Node_List(Node *&L)或者Init_Node_List(Node_List &L){Node *p,*t; //t工作指针,p临时指针int i=1,a;cout<<"please input datas (end of -1):";while(cin>>a,a!=-1)//while(scanf("%d",&a)){ if(a){t=(Node *)malloc(sizeof(Node));//建立第一个节点 if(!t) { cout<<"申请内存失败\n"; exit(0); } t->data=a;if(i==1){*head=t;//将头节点指向第一个节点}else{p->next=t;}p=t;//p指向建立的节点t}i++;//记录节点数}if(i==1)//如果没有输入节点数据并且输入-1结束{exit(0);}p->next=NULL;//将最后一个节点的指针域置空}//3.1 显示有头结点链表数据void Show_Node_List_HaHead(Node_List L)//无需改变指针L所以值传递{cout<<"链表节点:";while(L->next!=NULL){cout<<L->next->data;if(L->next->next!=NULL){cout<<"->";}L=L->next;}cout<<"\n";}//3.2显示无头结点链表数据void Show_Node_List_NoHead(Node_List L)//无需改变指针L所以值传递{cout<<"链表节点:";while(L!=NULL){cout<<L->data;if(L->next!=NULL){cout<<"->";}L=L->next;}cout<<"\n";}//4.尾插法初始化有头结点链表void Init_Node_List_Have_BackInsert(Node **head){ Node *s; Node *r=*head=(Node*)malloc(sizeof(Node)); if(!r) { cout<<"申请内存失败\n"; exit(0); } (*head)->data=NULL; (*head)->next=NULL;int a,i=1;cout<<"please input datas (end of -1):"; while(cin>>a,a!=-1){ if(a){ s=(Node *)malloc(sizeof(Node)); if(!s) { cout<<"申请内存失败\n"; exit(0); } s->data=a; r->next=s; r=s; } i++; } if(i==1)//如果没有输入节点数据并且输入-1结束{exit(0);} r->next=NULL;}//5.头插法初始化有头结点链表void Init_Node_List_Have_HeadInsert(Node **head){ Node *s; Node *r=*head=(Node*)malloc(sizeof(Node));(*head)->data=NULL;(*head)->next=NULL;int a,i=1;cout<<"please input datas (end of -1):"; while(cin>>a,a!=-1){ if(a){ s=(Node *)malloc(sizeof(Node)); s->data=a; s->next=r->next; r->next=s; if(i==1) { s->next=NULL; } } i++; } if(i==1)//如果没有输入节点数据并且输入-1结束{exit(0);} }
/********************************************************************** * Copyright (c)2015,WK Studios * Filename: main.cpp * Compiler: GCC,VS,VC6.0 win32 * Author:WK * Time: 2015 26 4 ************************************************************************/ #include"Node.h"int main(){Node_List myNode;int select=1;while(select){cout<<"***********************************************\n";cout<<"* [1] Init_Node_List_No_HeadInsert *\n";cout<<"* [2] Init_Node_List_No_BackInsert *\n";cout<<"* [3] Init_Node_List_Have_HeadInsert *\n";cout<<"* [4] Init_Node_List_Have_BackInsert *\n";cout<<"* [5] Show_Node_List_HaHead *\n";cout<<"* [6] Show_Node_List_NoHead *\n";cout<<"* [0] Quit *\n";cout<<"***********************************************\n";cout<<"Please select a number which represent you want to operate:>"; cin>>select;switch(select){case 1:Init_Node_List_No_HeadInsert(&myNode);//如果用的是Init_Node_List(Node **L)必须Init_Node_List(&myNode); break;case 2:Init_Node_List_No_BackInsert(&myNode);break;case 3:Init_Node_List_Have_HeadInsert(&myNode);break; case 4:Init_Node_List_Have_BackInsert(&myNode);break;case 5:Show_Node_List_HaHead(myNode);break;case 6:Show_Node_List_NoHead(myNode);break;default :cout<<"Thanks for using!\n";break;}}return 0;}
0 0
- 数据结构之—线性表之—浅谈单链表有头结点和无头节点
- 数据结构试验二 线性表实现(无头结点)
- 简单数据结构之链表(无头节点)
- 数据结构之浅谈线性表
- 数据结构-线性表-头指针&头结点
- 数据结构-线性表-头指针&头结点
- 数据结构:头结点线性链表
- 线性表的链式存储实现(无头结点)(陈越数据结构)
- 数据结构之线性表——倒数第k个结点
- 数据结构之线性表——倒数第k个结点
- 数据结构之—线性表之—双向链表之—浅谈双循环链表
- 链式存储线性表(无头节点)
- 数据结构—头指针和头结点分析
- 软考题目之头结点、头指针和首元节点
- 无头结点链表实现线性表
- 链表创建之无头节点非空链表
- 线性链表中的头结点和头指针
- 数据结构-双向循环链表(无头结点)相关操作
- JAVA枚举
- java Web编写html和Java文件出现的汉字问题
- Android中R文件不见了的解决方法
- IOS原生API扫描二维码
- 黑马程序员--IOS学习日记:12--OC集合类
- 数据结构之—线性表之—浅谈单链表有头结点和无头节点
- 黑马程序员——关于接口的理解
- python encode和decode函数说明
- 编译原理 (预处理>编译>汇编>链接)
- java基础知识—JAVA中抽象类和接口的区别
- Mac下配置Eclipse内存,解决Eclipse内存溢出问题
- According to TLD or attribute directive in tag file异常
- ListView滑动删除实现之三——创建可滑动删除的ListView
- 黑马程序员--IOS学习日记:13--OC中的block和protocol