數據結構基礎算法-鏈表

#include
#include<stdlib.h>
# define N 10


typedef struct node{
int data;
struct node * next;
} ElemSN;


ElemSN * GreatLink1(int a[],int n){
ElemSN *h,*t,*p;
int i;
//正向創建頭結點
h=t=(ElemSN *)(malloc(sizeof (ElemSN)));
h->data=a[0];
h->next=NULL;


for(i=1;i<n;i++)
{
p=(ElemSN *)(malloc(sizeof (ElemSN)));
p->data=a[i];
p->next=NULL;
t->next=p;
t=p;
}
return h;
}


ElemSN * GreatLink2(int a[]){
ElemSN *h,*p;
int i;
//反向創建頭結點
h=NULL;
for(i=N-1;i>-1;i--)
{
p=(ElemSN *)(malloc(sizeof (ElemSN)));
p->data=a[i];
p->next=h;
h=p;
}
return h;
}


//輸出鏈表
void PrintLink(ElemSN *h){
ElemSN *p;
for(p=h;p!=NULL;p=p->next)
printf("%5d",p->data);
}


//輸出鏈表中奇數位點
void Outobb(ElemSN *h){
ElemSN *p;
int i=1;
for(p=h;p;p=p->next,i++)
{
if(i%2)
printf("%5d",p->data);
}
printf("\n");
}


//逆向輸出鏈表
void Exchange(ElemSN *h){
ElemSN *p,*end;
end=NULL;
while(end-h)
{
for(p=h;(p->next)-end;p=p->next);
printf("%5d",p->data);
end=p;
}
printf("\n");
}


//返回單向鏈表個數
int Number(ElemSN * h){
ElemSN *p;
int i=0;


for(p=h;p;p=p->next,i++);


return i;
}


//返回單向鏈表奇數個數
int ObbNumber(ElemSN *h){
ElemSN *p;
int i=0;
for(p=h;p;p=p->next)
i=i+p->data%2;


return i;
}


//返回最大值及個數
void MaxNumber(ElemSN *h){
ElemSN *p;
int i,max;
i=0;
max=h->data;
for(p=h;p;p=p->next)
{
if((p->data)>max)
max=p->data;
}
for(p=h;p;p=p->next)
{
if(p->data==max)
i++;
}
printf("輸出最大值:%d\n",max);
printf("輸出最大值個數:%d\n",i);
}


//交換頭結點和尾節點數據域值
void ChangeFL(ElemSN *h)
{
ElemSN *p;
int t;
for(p=h;p->next;p=p->next);
t=p->data;
p->data=h->data;
h->data=t;
}


//交換頭尾節點
void ChangeFLD(ElemSN *h)
{
ElemSN *p,*q,*t;
t=h->next;
for(p=h,q=h->next;q;q=q->next,q=q->next,p=p->next);
q->next=t;
p->next=h;
h->next=NULL;
h=t;
}


int main(void)
{
int a[N]={7,2,9,4,7,8,9,14,11,14};
ElemSN * head;
int n,obbn;
head=NULL;;
head=GreatLink2(a,10);


printf("輸出鏈表:");
PrintLink(head);
printf("\n");


    n=Number(head);
printf("返回單向鏈表個數:%d\n",n);


obbn=ObbNumber(head);
printf("返回單向鏈表奇數個數:%d\n",obbn);


printf("輸出鏈表中奇數位:");
Outobb(head);


printf("逆向輸出鏈表:");
Exchange(head);
    
//返回最大值及個數
MaxNumber(head);
    
printf("交換頭結點和尾節點數據域值:");
    ChangeFL(head);
PrintLink(head);
printf("\n");


printf("交換頭結點和尾節點:");
    ChangeFLD(head);
PrintLink(head);
printf("\n");


return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章