C语言

1链表相关操作

2016-06-08  本文已影响145人  Micason

1.创建带头节点的链表,并且遍历输出。

题目

Paste_Image.png
#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;

SLIST *creatlist(int  *a)
{
 SLIST *h,*p,*q;
    int i;
    h = p = (SLIST *)malloc(sizeof(SLIST));
    for(i = 0; i < N; i++) {
        q = (SLIST *)malloc(sizeof(SLIST));
        q->data = a[i];
        p->next = q;
        p = q;
    }
    p->next = 0;
    return  h;
 }
void outlist(SLIST  *h)
{
 SLIST *p = h->next;
    while(p) {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}
int main(void)
{
   SLIST  *head;
  int a[N],i;
   for(i=0;i<N;i++)
   {
       scanf("%d",&a[i]);
   }
  head=creatlist(a);
  outlist(head);
  return 0;
}

2.插入新链表,保持顺序,并遍历输出链表。

Paste_Image.png
#include    <stdio.h>
#include    <stdlib.h>
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;

SLIST *creatlist()
{  
SLIST *head,*tail,*cnew;
     int num;
    head=NULL;
  
  while(1)
    {
     scanf("%d",&num);
     if(num==-1)
       break;
     cnew=(SLIST*)malloc(sizeof(SLIST));
     cnew->data=num;
     cnew->next=NULL;
     if(head==NULL)
        head=cnew;
     else
        tail->next=cnew;
     tail=cnew;
    }
    return head;
 }
void outlist(SLIST  *h)
{  
SLIST   *p;
       for(p=h;p!=NULL;p=p->next)
       printf("%d ",p->data);
    printf("\n");
}
int main(void)
{  
   SLIST  *head;
  head=creatlist();
  outlist(head);
  return 0;
}

3.插入新的链表,并遍历输出。

Paste_Image.png
#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;
SLIST *insertlist(SLIST * p,int *pvalue)
{
    SLIST *tmp=p,*tmp_p;
    int t=*pvalue;
    while(tmp->next!=NULL&&tmp->next->data<t)
    tmp=tmp->next;
    tmp_p=(SLIST *)malloc(sizeof(SLIST));
    tmp_p->next=tmp->next;
    tmp_p->data=t;
    tmp->next=tmp_p;
    return p;
 }


SLIST *creatlist(int  *a)
{
 SLIST  *h,*p,*q;      int  i;
   h=p=(SLIST *)malloc(sizeof(SLIST));
   for(i=0; i<N; i++)
   {  q=(SLIST *)malloc(sizeof(SLIST));
      q->data=a[i];
   p->next=q;
   p=q;
   }
   p->next=0;
   return  h;
 }
void outlist(SLIST  *h)
{
SLIST *tmp =h->next;
while(tmp!=NULL){
    printf("%d ",tmp->data);
    tmp=tmp->next;
}
}
int main(void)
{
   SLIST  *head;
   int a[N];
int nvalue,i;
   for(i=0;i<N;i++)
   {
       scanf("%d",&a[i]);
   }
  scanf("%d",&nvalue);//插入的结点数据
  head=creatlist(a);
  head=insertlist(head,&nvalue);
  outlist(head);
  return 0;
}

4.删除指定节点,并遍历输出。

Paste_Image.png
#include    <stdio.h>
#include    <stdlib.h>
#define    N    8
typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;
SLIST *deletelist(SLIST * p,int *pvalue)
{  
 SLIST *todel, *head = p;
    while(p && p->next) {
        if (p->next->data == *pvalue) {
            todel = p->next;
            p->next = todel->next;
            free(todel);
        } else {
            p = p->next;
          }
    }
    return head;
 }


SLIST *creatlist(int  *a)
{  
 SLIST  *h,*p,*q;      int  i;
   h=p=(SLIST *)malloc(sizeof(SLIST));
   for(i=0; i<N; i++)
   {  q=(SLIST *)malloc(sizeof(SLIST));
      q->data=a[i];
   p->next=q; 
   p=q;
   }
   p->next=0;
   return  h;
 }
void outlist(SLIST  *h)
{  
  h = h->next;
    while (h) {
        printf("%d ", h->data);
        h = h->next;
   //     if (h) {
  //          printf(" ");
  //      }
    }
    printf("\n");
}
int main(void)
{  
   SLIST  *head;
int nvalue,i;
int a[N];
   for(i=0;i<N;i++)
   {
       scanf("%d",&a[i]);
   }
  scanf("%d",&nvalue);//删除的结点数据
  head=creatlist(a);
  head=deletelist(head,&nvalue);
  outlist(head);
  return 0;
}
上一篇下一篇

猜你喜欢

热点阅读