#include "stdlib.h"
#include "stdio.h"
struct list
{ int data
struct list *next
}
typedef struct list node
typedef node *link
void main()
{ link ptr,head
int num,i
ptr=(link)malloc(sizeof(node))
ptr=head
printf("please input 5 numbers==>\n")
for(i=0i<=4i++)
{
scanf("%d",&num)
ptr->data=num
ptr->next=(link)malloc(sizeof(node))
if(i==4) ptr->next=NULL
else ptr=ptr->next
}
ptr=head
while(ptr!=NULL)
{ printf("The value is ==>%d\n",ptr->data)
ptr=ptr->next
}
}
上面是一个简单的创建链表的C程序。所谓链表形象的讲就是一个数据块里面存有数据,并且存有下一个数据的指针,这样一个指一个形成一个数据链。这个数据链可以被操作,例如插入数据,删除数据,等。至于指令,首先定义一个结构体,它存有数据和指向下一个数据块的指针。然后分配空间。注意最后一个为NULL,当然你也可以指向开头一个数据块形成一个循环链表
#include<stdio.h>#include<stdlib.h>
//链表定义
typedef int ElemType
typedef struct LNode
{
int data
struct LNode *next
}LNode,*LinkList
/*************************************
* 链表函数 *
*************************************/
//链表初始化
void InitLink(LinkList &L)
//创建函数,尾插法
void CreateLink_T(LinkList &L,int n)
//创建函数,头插法
void CreateLink_H(LinkList &L,int n)
//销毁函数
void DestroyLink(LinkList &L)
//判断是否为空函数
bool EmptyLink(LinkList &L)
//获取函数
bool GetLink(LinkList &L,int i,int &e)
//插入函数
void InsertLink(LinkList &L,int i,int e)
//删除函数
void DeleteLink(LinkList &L,int i,int &e)
//遍历函数
void TraverseLink(LinkList &L)
//链表长度函数
int LengthLink(LinkList &L)
//合并函数
void MergeLink(LinkList &L1,LinkList L2)
void main()
{
LinkList L1,L2
InitLink(L1)
InitLink(L2)
CreateLink_H(L1,2)
CreateLink_T(L2,2)
TraverseLink(L1)
printf("\n")
TraverseLink(L2)
printf("\n")
MergeLink(L1,L2)
TraverseLink(L1)
TraverseLink(L2)
}
//创建函数,尾插法
void InitLink(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode))
if (!L)
{
printf("Init error\n")
return
}
L->next=NULL
}
void CreateLink_T(LinkList &L,int n)
{
if(n<1)
{
printf("n must >=1\n")
return
}
else
{
// L=(LinkList)malloc(sizeof(LNode))
L->next=NULL
for(int i=0i<ni++)
{
LinkList p=(LinkList)malloc(sizeof(LNode))// the lower letter p
printf("enter the data :\t")
scanf("%d",&(p->data))
p->next=L->next
L->next=p
}
}
}
//创建函数,头插法
void CreateLink_H(LinkList &L,int n)
{
if (n<1)
{
printf("n must >=1\n ")
return
}
else
{
//L=(LinkList)malloc(sizeof(LNode))
LinkList pre=(LinkList)malloc(sizeof(LNode))
L->next=NULL
pre=L
for(int i=0i<ni++)
{
LinkList p=(LinkList)malloc(sizeof(LNode))
printf("enter the data:\t")
scanf("%d",&(p->data))
pre->next=p
pre=p
}
pre->next=NULL
}
}
//销毁函数
void DestroyLink(LinkList &L)
{
LinkList q=L,p=L
while (p)
{
q=p
p=p->next
free(q)
}
L->next=NULL
}
//判断是否为空函数
bool EmptyLink(LinkList &L)
{
if (NULL==L->next)
{
return true
}
else
{
return false
}
}
//获取函数
bool GetLink(LinkList &L,int i,int&e)
{
if (i<1)
{
return false
}
else
{
if (EmptyLink(L))
{
return false
}
LinkList p=L->next
int j=1
while(p&&j<i)
{
p=p->next
j++
}
if (!p||j>i)
{
return false
}
else
{
e=p->data
return true
}
}
}
//插入函数
void InsertLink(LinkList &L,int i,int e)
{
if (i<0||i>LengthLink(L))
{
printf("Insert error\n")
return
}
else
{
LinkList p=L
int j=0
while(p&&(j<i))
{
p=p->next
j++
}
if (!p||j>i)
{
printf("Insert error\n")
return
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode))
q->data=e
q->next=p->next
p->next=q
}
}
}
//删除函数
void DeleteLink(LinkList &L,int i,int &e)
{
if(i<=0||i>LengthLink(L))
{
printf("delete error\n")
return
}
else
{
LinkList p=L
int j=0
while(p&&j<i-1)
{
p=p->next
j++
}
if(!p||j>i)
{
printf("please enter i again\n")
return
}
else
{
LinkList q=p->next
e=p->next->data
p->next=p->next->next
free(q)
}
}
}
//遍历函数
void TraverseLink(LinkList &L)
{
LinkList p=L->next
if(!p)
{
printf("the Link L is empty\n")
}
while(p)
{
printf("%d\n",p->data)
p=p->next
}
}
//链表长度函数
int LengthLink(LinkList &L)
{
int i=0
LinkList p=L->next
while(p)
{
p=p->next
i++
}
return i
}
//合并函数
void MergeLink(LinkList &L1,LinkList L2)
{
int i=0,flag=0
LinkList p1=L1->next,p2=L2->next
LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode))
LinkList pre=p
if (!p)
{
printf("MergeLink error\n")
return
}
p->next=NULL
while (p1&&p2)
{
if (p1->data>=p2->data)
{
InsertLink(p,i++,p2->data)
p2=p2->next
}
else
{
InsertLink(p,i++,p1->data)
p1=p1->next
}
}
while (p1)
{
InsertLink(p,i++,p1->data)
p1=p1->next
}
while(p2)
{
InsertLink(p,i++,p2->data)
p2=p2->next
}
while(pre)
{
pre=pre->next
}
LinkList q=L1
L1=p
DestroyLink(q)
DestroyLink(L2)
}
这是个很简单的链表创建和输出#include
#include
typedef
struct
linkednode
{
char
data
struct
linkednode
*next
}node,*link_list//链表节点的结构及重命名
link_list
creat()//创建一个链表返回类型是链表的首地址
{
link_list
L
node
*p1,*p2
char
data
L=(node*)malloc(sizeof(node))//开辟存储空间
p2=L
while((data=getchar())!='\n')//输入回车键时结束输入
{
p1=(node*)malloc(sizeof(node))
p1->data=data
p2->next=p1
p2=p1
}
p2->next=NULL
return
L
}
void
print(link_list
L)//把链表输出
{
node
*p
p=L->next
while(p!=NULL)
{
printf("%c",p->data)
p=p->next
}
printf("\n")
}
void
main()
{
link_list
L=NULL
char
x
printf("请输入链表节点:\n")
L=creat()
print(L)
}