#include<stdio.h>
#include<stdlib.h>
#define N 10
typedef struct node{
int data;
struct node* next;
}ElemSN;
//创建一个单向链表
ElemSN* CreatLink(int a[],int n)
{
ElemSN *head,*tail,*p;
head=NULL;
for(int i=0;i<n;i++)
{
p=(ElemSN*)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=NULL;
if(!head)
{
head=tail=p;
tail->next=NULL;
}
else
{
tail=tail->next=p;
tail->next=NULL;
}
}
return head;
}
//打印该链表所有结点的值
void PrintLink(ElemSN* head)
{
ElemSN *p=head;
for(;p;p=p->next)
printf("%5d",p->data);
}
//返回单向链表尾节点并输出
ElemSN* TailNode(ElemSN *head)
{
ElemSN *p;
for(p=head;p&&p->next;p=p->next);
return p;
}
//输出结点个数
int CountNode(ElemSN *head)
{
ElemSN *p;
int count=0;
for(p=head;p;p=p->next)
count++;
return count;
}
//输出数据域值为奇数的结点个数
int CountOddNode(ElemSN *head)
{
int count=0;
ElemSN *p;
for(p=head;p;p=p->next)
{
if(p->data%2)
count++;
}
return count;
}
//返回该链表数据域值最大的结点并输出该结点的值
ElemSN* MaxNode(ElemSN *head)
{
ElemSN *p,*pmax;
pmax=head;
for(p=head->next;p;p=p->next)
if(pmax->data<p->data)
pmax=p;
return pmax;
}
//逆序输出这个链表
void PrePrintLink(ElemSN *head)
{
ElemSN *p,*pend;
pend=NULL;
while(head-pend)
{
for(p=head;p->next-pend;p=p->next);
printf("%5d",p->data);
pend=p;
}
}
int main(void)
{
ElemSN *head,*tail,*pmax;
int Count,CountOdd;
int a[N]={3,2,5,8,4,7,6,9,0,10};
head=CreatLink(a,N); //创建单向链表,返回头指针
PrintLink(head); //打印该链表所有的值
printf("\n"); //换行
tail=TailNode(head); //返回该链表的尾结点
printf("该链表尾节点数据域的值为:%d\n",tail->data); //打印该链表尾结点的值
Count=CountNode(head);
printf("该链表一共有%d个结点\n",Count); //输出该链表的结点个数
CountOdd=CountOddNode(head);
printf("该链表数据域的值为奇数的结点个数为:%d\n",CountOdd); //输出数据域值为奇数的结点个数
pmax=MaxNode(head); //返回链表中数据域值最大的结点
printf("该链表所有结点中数据域最大的值为:%d\n",pmax->data); //输出该最大值结点的值
PrePrintLink(head); //逆序输出该链表
}
链表的遍历(打印链表所有结点的值 ,返回链表的尾结点,输出该链表的结点个数,输出最大值结点的值)
猜你喜欢
转载自blog.csdn.net/qq_39241239/article/details/80882370
今日推荐
周排行