/链表的遍历和数组类似,就是跑链表/
//输出单向链表尾结点的值
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Creatlink(int a[])
{
ElemSN *h,*tail;
//创建头结点
h=tail=(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(int i=1;i<N;i++){
tail=tail->next=(ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
ElemSN * Printlink(ElemSN *h)
{
ElemSN *p;//p从头指针开始不断向后移动,到最后一个元素停下
for(p=h;p->next ;p=p->next);//{
// printf("%4d",p->data);
//}
return p;
}
int main()
{
int a[N]={10,20,30,40,50};
ElemSN *head=NULL,*x;
//正向创建单向链表
head=Creatlink(a);
//输出单向链表
x=Printlink(head);
printf("%d",x->data);
return 0;
}
//输出单向链表的结点个数
#include<stdio.h>
#include<stdlib.h>
#define N 6
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Creatlink(int a[])
{
ElemSN *h,*tail;
//创建头结点
h=tail=(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(int i=1;i<N;i++){
tail=tail->next=(ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
int Printlink(ElemSN *h)
{
ElemSN *p;
int cnt;
for(p=h;p!=NULL;p=p->next,cnt++);
return cnt;
}
int main()
{
int a[N]={10,20,30,40,50,0},x;
ElemSN *head=NULL;
//正向创建单向链表
head=Creatlink(a);
//输出单向链表
x=Printlink(head);
printf("%d",x);
return 0;
}
//输出单向链表的奇数结点个数
#include<stdio.h>
#include<stdlib.h>
#define N 6
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Creatlink(int a[])
{
ElemSN *h,*tail;
//创建头结点
h=tail=(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(int i=1;i<N;i++){
tail=tail->next=(ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
int Printlink(ElemSN *h)
{
ElemSN *p;
int cnt=0;
for(p=h;p!=NULL;p=p->next){
cnt+=p->data%2; //计数
}
return cnt;
}
int main()
{
int a[N]={10,21,30,44,50,21},x;
ElemSN *head=NULL;
//正向创建单向链表
head=Creatlink(a);
//输出单向链表
x=Printlink(head);
printf("%d",x);
return 0;
}
//输出单向链表的最大值(假设数据不重复)
#include<stdio.h>
#include<stdlib.h>
#define N 6
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Creatlink(int a[])
{
ElemSN *h,*tail;
//创建头结点
h=tail=(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(int i=1;i<N;i++){
tail=tail->next=(ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
ElemSN *Printlink(ElemSN *h)
{
ElemSN *pmax,*p;
pmax=h;
for(p=h->next;p;p=p->next){
if(pmax->data<p->data){//判断
pmax=p;
}
}
return pmax;
}
int main()
{
int a[N]={10,20,66,40,50,21};
ElemSN *head=NULL,*x;
//正向创建单向链表
head=Creatlink(a);
//输出单向链表
x=Printlink(head);
printf("%d",x->data);
return 0;
}
//逆向输出单向链表数据域的值
#include<stdio.h>
#include<stdlib.h>
#define N 6
typedef struct node{
int data;
struct node *next;
}ElemSN;
ElemSN *Creatlink(int a[])
{
ElemSN *h,*tail;
//创建头结点
h=tail=(ElemSN *)malloc(sizeof(ElemSN));
h->data=a[0];
h->next=NULL;
for(int i=1;i<N;i++){
tail=tail->next=(ElemSN *)malloc(sizeof(ElemSN));
tail->data=a[i];
tail->next=NULL;
}
return h;
}
void Printlink(ElemSN *h)
{
ElemSN *pend=NULL,*p;
while(pend!=h){
for(p=h;p->next!=pend;p=p->next);//每次跑到pend前面
printf("%5d",p->data);
pend=p;
}
}
int main()
{
int a[N]={10,20,66,40,50,21};
ElemSN *head=NULL;
//正向创建单向链表
head=Creatlink(a);
//输出单向链表
Printlink(head);
return 0;
}