单链表在数据结构中应用广泛,是极常见的链式存贮方式,单链表分为有带头结点和不带头结点的单链表,其创建方式又分为头插法创建和尾插法创建,详细创建方法如下:
#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;//分配空间失败,返回-1
printf("请输入%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;
else
p = 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");
}
程序运行截图: