创建单链表的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");}






程序运行截图:




原创粉丝点击