如定义数组,结合前面所学数组的知识,可这样定义:
struct student s[10]; struct stu s1[20];
2 指针链表
掌握了前面指针和结构体的知识内容,对于指针链表的理解和掌握是非常重要的。
2.1 指针链表的定义
这里主要讲解单项链表结点的结构体类型的定义,对于初学者掌握了这种定义,对于以后学习更为复杂的链表知识的理解是很有帮助的。
单项链表结点的定义:
struct node
{
int data; //存放的数据,可以定义其他更为复杂的数据结构
struct node *next; //指向struct node类型数据,用此建立链表
};
2.2 指针链表的建立
定义好类型后,再定义变量,并将链表建立起来,形成整数数据按升序建立的数据链,下面通过函数create来实现链表的建立。
struct node *create()
{
struct node *head,*p,*q,num;
head=NULL;
scanf("%d",&num);
while(num!=0)
{
p=(struct node *)malloc(sizeof(struct node ));
if(p==NULL)
{
printf("Allocation failure\n");
exit(0);
}
p->data=num;
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
return head;
}
2.3 指针链表的插入
链表建立完成后,最常用的操作之一就是对链表的数据进行增加,也就是插入操作,具体程序通过insert函数实现。
struct node*insert(struct node*head,sturct node*r,int*x)
{
struct nod *p,*q;
if(head==NULL)
{
head=r;
r->next=NULL;
}
else
{
p=head;
while(*x>p->data&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(*xdata)
{
if(p==head)
head=r;
else
q->next=r;
p->next=p;
}
else
if(p==NULL)
{
p->next=r;
r->next=NULL;
}
return head;
}
2.4 指针链表的删除
对于链表中数据的删除也是链表数据中操作的重点,具体实现过程通过函数deletenode实现。
struct node*deletenode(struct node*head,int*x)
{
struct nod*p,*q;
if(head==NULL)
{
printf("This is a empty list.");
return head;
}
p=head;
while(*x!=p->data&&p->next!=NULL)
{
q=p;
p=p->next;
}
if(*x==p->data)
{
if(p==head)
head=p->next;
else
q->next=p->next;
free(p);
}
else
printf("NOT FOUND");
return head;
}
3总结 |
核心期刊网(www.hexinqk.com)秉承“诚以为基,信以为本”的宗旨,为广大学者老师提供投稿辅导、写作指导、核心期刊推荐等服务。 核心期刊网专业期刊发表机构,为学术研究工作者解决北大核心、CSSCI核心、统计源核心、EI核心等投稿辅导咨询与写作指导的问题。 投稿辅导咨询电话:18915033935 投稿辅导客服QQ: 1002080872、 1003158336 投稿辅导投稿邮箱:1003158336@qq.com |