创建单链表的4种方式
来源:互联网 发布:网络歌曲《情醉》 编辑:程序博客网 时间:2024/06/06 06:32
单链表在数据结构中应用广泛,是极常见的链式存贮方式,单链表分为有带头结点和不带头结点的单链表,其创建方式又分为头插法创建和尾插法创建,详细创建方法如下:
#include <stdio.h>#include <stdlib.h>typedef int ElemType; //类型定义声明typedef struct Node{ElemType data;struct Node *next;}LNode, *LinkList;int InitList_link(LinkList *h) //初始化单链表函数,初始化空单链表,带头结点{*h = (LinkList)malloc(sizeof(LNode));if(NULL == *h)return -1;(*h)->next = NULL;return 0;}int InitList_link_nh(LinkList *h)//初始化单链表函数,初始化空单链表,不带头结点{*h = NULL;return 0;}int CreateList_link_h(LinkList h, int n)//带头结点—头插法-创建链表函数{LNode *p;int i;printf("带头结点 头插法\n");for(i=n;i>0;i--){p=(LinkList)malloc(sizeof(LNode)); if(NULL==p) return -1; printf("请输入第%d个元素",i);scanf("%d",&p->data);p->next=h->next;h->next=p;} printf("\n");return 0;}int CreateList_link_t(LinkList h, int n)//带头结点—尾插法-创建链表函数{ int i;LNode *p,*q;//定义一个q指针始终指向尾链表printf("带头结点 尾插法\n");q=h; for(i=1;i<=n;i++){p=(LinkList)malloc(sizeof(LNode)); if(NULL==p) return -1;//分配空间失败,返回-1printf("请输入%d个元素:",i);scanf("%d",&p->data);p->next=NULL; q->next=p;q=p;} printf("\n");return 0;}int CreateList_link_nh_h(LinkList *h, int n)//不带头结点—头插法-创建链表函数{LNode *p=NULL;int i;printf("不带头结点 头插法\n");for(i=n;i>=1;i--){ p=(LinkList)malloc(sizeof(LNode)); printf("请输入%d个元素:",i); scanf("%d",&p->data); p->next=(*h); (*h)=p;} printf("\n");return 0;}int CreateList_link_nh_t(LinkList *h, int n)//不带头结点—尾插法-创建链表函数{LNode *p=NULL,*q=NULL;int i=1;printf("不带头结点 尾插法\n");{ p=(LinkList)malloc(sizeof(LNode)); p->next=NULL; printf("请输入%d个元素:",i); scanf("%d",&p->data); (*h)=p; } q=(*h); for(i=2;i<=n;i++) { p=(LinkList)malloc(sizeof(LNode)); p->next=NULL; printf("请输入%d个元素:",i); scanf("%d",&p->data); q->next=p; q=p; } printf("\n");return 0;}void ShowList_link(LinkList h, int flag)//输出当前链表函数{Node *p = NULL;if(1 == flag)p = h->next;elsep = h;while(NULL != p){printf("%d ", p->data);p = p->next;}printf("\n");}void main(){LinkList h1, h2, h1_nh, h2_nh;int len;InitList_link(&h1);InitList_link(&h2);InitList_link_nh(&h1_nh);InitList_link_nh(&h2_nh);printf("please input the length of list:\n");scanf("%d", &len);while(len <= 0){printf("please input the length of list:\n");scanf("%d", &len);}CreateList_link_h(h1, len);CreateList_link_t(h2, len);CreateList_link_nh_h(&h1_nh, len);CreateList_link_nh_t(&h2_nh, len);printf("h1 is:");ShowList_link(h1, 1);printf("\n");printf("h2 is:");ShowList_link(h2, 1);printf("\n");printf("h1_nh is:");ShowList_link(h1_nh,0);printf("\n");printf("h2_nh is:");ShowList_link(h2_nh,0);printf("\n");}
程序运行截图:
- 创建单链表的4种方式
- 单链表的创建方式
- 关于单链表的两种创建方式
- JAVA创建对象的4种方式
- 创建对象的4种方式
- Qt线程创建的4种方式
- java创建线程的4种方式
- Java创建对象的4种方式?
- 创建多线程的4种方式
- 线程池创建的4种方式
- 创建对象(实例))的4种方式
- 深入理解javascript的4种对象创建方式
- 创建的对象的七种方式
- 创建Class对象的4中方式
- [GDI+] 创建Images的两种方式
- 创建XMLHttpRequest对象的两种方式
- 动态创建option的两种方式
- mysql下创建的两种方式
- 集合运算(实验题2.6)
- Java 线程池学习
- OCP-1Z0-053-V12.02-189题
- 为什么要学习C语言
- zoj 3366 Light Bulb 三分
- 创建单链表的4种方式
- 使用spring 并加载模板发送Email 发邮件 java 模板
- POJ 2586 Y2K Accounting Bug 贪心
- C++ STL学习笔记2--String
- 关于嵌入式linux开发环境搭建-TFTP,SAMBA,NFS服务器的搭建
- POJ 1118 Lining Up
- 关于IOCP那些事
- 环境: Ogre 在 Visual Studio 2010 上的环境配置
- 一个球从100米高度自由落下