链表的遍历
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct node
{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int a[])
{
ElemSN *h=NULL,*tail,*p;
for(int i=0;i<N;i++)
{
p=(ElemSN *)malloc(sizeof(ElemSN));
p->data =a[i];
p->next = NULL;
if(!h)
{
h=tail=p;
}
else
{
tail=tail->next=p;
}
}
return h;
}
void printlink(ElemSN *h)
{
ElemSN *p;
for(p=h;p!=NULL;p=p->next)
{
printf("%5d",p->data);
}
}
ElemSN *Tailnode(ElemSN *h)
{
ElemSN *p;
for(p=h;p->next;p=p->next);
return p;
}
int createnode(ElemSN *h)
{
int a=0;
ElemSN *p;
for(p=h;p;a++,p=p->next);
return a;
}
int countoddnode(ElemSN *h)
{
ElemSN *p;
int odd=0;
for(p=h;p;p=p->next)
{
odd+=p->data %2;
}
return odd;
}
ElemSN *maxnode(ElemSN *h)
{
ElemSN *Pmax,*p;
Pmax=h;
for(p=h->next;p;p=p->next)
{
if(Pmax->data < p->data)
Pmax=p;
}
return Pmax;
}
void pneprintlink(ElemSN *h)
{
ElemSN *lend=NULL,*p;
while(lend-h)
{
for(p=h;p->next-lend;p=p->next);
printf("%5d",p->data);
lend=p;
}
}
int main(void)
{
int a[N] ={3,2,5,8,4};
int count,countodd;
ElemSN * head=NULL,*ptail,*pmax,*q;
//创建单向链表
head = Createlink(a);
//输出单向链表
printlink(head);
//输出尾结点值
ptail=Tailnode(head);
printf("\n尾结点值为:%d\n",ptail->data);
//输出结点个数
count=createnode(head);
printf("结点个数为:%d\n",count);
//输出奇数个数
countodd=countoddnode(head);
printf("奇数个数:%d\n",countodd);
//输出最大值
pmax=maxnode(head);
printf("max=%d\n",pmax->data);
//逆序输出
pneprintlink(head);
}
链表的查找和删除
#include<stdio.h>
#include<stdlib.h>
#define N 6
typedef struct node
{
int data;
struct node *next;
}ElemSN;
ElemSN *Createlink(int a[])
{
ElemSN *h=NULL,*tail,*p;
for(int i=0;i<N;i++)
{
p=(ElemSN *)malloc(sizeof(ElemSN));
p->data =a[i];
p->next = NULL;
if(!h)
{
h=tail=p;
}
else
{
tail->next=p;
tail=p;
}
}
return h;
}
ElemSN * Delsinglenode(ElemSN*h,int key)
{
ElemSN *p,*q;
//查找并删除结点
for(p=h;p&&p->data-key;q=p,p=p->next);
{
if(!p)
{
printf("not found!\n");
}
else
{
if(!(p-h))
{
h=h->next;
}
else
q->next=p->next;
free(p);
p=NULL;
}
}
return h;
}
void printlink(ElemSN *h)
{
ElemSN *p;
for(p=h;p!=NULL;p=p->next)
{
printf("%5d",p->data);
}
}
int main(void)
{
int a[6] ={3,2,5,8,4,7};
int key;
ElemSN * head=NULL,*pkey;
//创建单向链表
head = Createlink(a);
//删除单结点
printf("输入一个数:");
scanf("%d",&key);
head=Delsinglenode(head,key);
//输出链表
printlink(head);
}
比较繁琐,适合基础学习,请谅解。