#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
datatype
typedef
struct
node
{
datatype
data
struct
node
*next
}linklist
linklist
*head
linklist
*hrear_creat()//建立链表
{
int
x
linklist
*head,*p,*rear
head=(struct
node*)malloc(20)
head->data=-999
rear=head
//clear()
printf("请输入互不相同的正整数以0结束:\n\t")
scanf("%d",&x)
while(x!=0)
{
p=(struct
node*)malloc(20)
p->data=x
rear->next=p
rear=p
scanf("%d",&x)
}
rear->next=NULL
return(head)
}
linklist
*key_delete(linklist
*head)
{
void
print(linklist
*rb)
linklist
*p,*q
int
x,y,i
printf("请输入要删除的起始结点:\n\t")
scanf("%d",&x)
printf("请输入要删除结点的个数:\n\t")
scanf("%d",&y)
p=head
while(
p
&&
(p->data!=x)
)
{
q
=
p
p=p->next
}
if(p!=NULL)
{
for(i=1i<=yi++)
{
p
=
q->next
if
(
p
==
NULL
)
break
q->next
=p->next
free(p)
}
return(head)
}
else
{
printf("\n\t要删除的结点不存在,请重新输入数据!\n",x)
return(NULL)
}
}
void
print(linklist
*rb)
{
linklist
*p,*head
int
n=0
head=rb->next
printf("链表中的数据为:\n\t%5d",head->data)
p=head->next
while(
p
)
{
printf("%5d",p->data)
p=p->next
n=n+1
if((n+1)%10==0)
printf("\n\t")
}
printf("\n\t")
}
int
main()
{
linklist
*p
p=hrear_creat()
print(p)
key_delete(p)
print(p)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)