亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

用C語言實現單鏈表的各種操作(二)

2020-01-26 16:08:29
字體:
來源:轉載
供稿:網友
上一篇文章<用C語言實現單鏈表的各種操作(一)>主要是單鏈表的一些最基本的操作,下面,主要是一些其他的典型的算法和測試程序。
復制代碼 代碼如下:

/* 對單鏈表進行排序處理*/
struct LNode *sort(struct LNode *head)
{
  LinkList *p;
  int n,i,j;
  int temp;
  n = ListLength(head);
  if(head == NULL || head->next == NULL)
    return head;
  p = head->next;
  for(j =1;j<n;++j)
  {
    p = head->next;
    for( i =0;i<n-j;++i)
    {
      if(p->data > p->next->data)
      {
        temp = p->data;
        p->data = p->next->data;
        p->next->data = temp;
      }
      p = p->next;
    }
  }
  return head;
}
/*對單鏈表進行逆置*/
LinkList *reverse(LinkList *head)
{
  LinkList *p1,*p2 = NULL,*p3 = NULL;
  if(head == NULL || head->next == NULL)
    return head;
  p1 = head->next;
  while(p1!=NULL)
  {
    p3 = p1->next;
    p1->next = p2;
    p2 = p1;
    p1 = p3;
 }
 head->next = p2;
  // head = p2;
  return head;
}
Status equal(ElemType c1,ElemType c2)
{
  if(c1== c2)
    return TRUE;
  else
    return FALSE;
}
/*將所有在線性表Lb中但不在La中的數據元素插入到La 中*/
void Union(LinkList *La,LinkList *Lb)
{
  ElemType *e;
  int La_len,Lb_len;
  int i;
  La_len = ListLength(La);
  Lb_len = ListLength(Lb);
  for(i=1;i<=Lb_len;i++)
  {
    GetElem(Lb,i,e); //取Lb中第i個元素賦給e
    if(!LocateElem(La,*e,equal))//La中不存在和e相同的元素,則插入
      ListInsert(La,++La_len,*e);
  }
}
void print(ElemType c)
{
  printf("%4d",c);
}
/* 合并兩個單鏈表,La和Lb中的數據是按非遞減排列,歸并后的Lc還是安非遞減排列*/
void MergeList(LinkList *La,LinkList *Lb,LinkList **Lc)
{
  int i =1,j=1,k=0;
  int La_len,Lb_len;
  ElemType *ai,*bj;
  ai = (ElemType *)malloc(sizeof(ElemType));
  bj = (ElemType *)malloc(sizeof(ElemType));

  InitList(Lc);
  La_len = ListLength(La);
  Lb_len = ListLength(Lb);
  while(i<=La_len && j<=Lb_len)
  {
    GetElem(La,i,ai);
    GetElem(Lb,j,bj);
    if(*ai<*bj)
    {
      ListInsert(*Lc,++k,*ai);
      ++i;
    }
    else
    {
      ListInsert(*Lc,++k,*bj);
      ++j;
    }
  }
  while(i<=La_len)
  {
    GetElem(La,i++,ai);
    ListInsert(*Lc,++k,*ai);
  }
  while(j<=Lb_len)
  {
    GetElem(Lb,j++,bj);
    ListInsert(*Lc,++k,*bj);
  }
}
/*只遍歷一次,找到單鏈表中的中間節點
 1 定義兩個指針,一個指針每次移動兩個步長(快指針),另一個指針每次移動一個數據(慢指針)
 2. 當快指針到達鏈表尾部的時候,慢指針就到了鏈表的中間節點
在程序中也可以判斷一個單鏈表是否有環,如果快指針一定能夠追趕上慢指針,否則就會以NULL結束*/
LinkList *Searchmid(LinkList * head)
{
  if(NULL == head)
    return NULL;
  if(head->next == NULL)
    return head;
  if(head->next->next == NULL)
    return head;

  LinkList *mid= head;
  LinkList *p = mid->next;

  while((p != NULL) && (NULL !=p->next))
  {
    mid = mid->next;
    p = p->next->next;
  }
  return mid;
}

下面主要是單鏈表的一個測試的程序。
復制代碼 代碼如下:

Status comp(ElemType c1,ElemType c2)
{
  if(c1==c2)
    return TRUE;
  else
    return FALSE;
}
void visit(ElemType c)
{
  printf("%4d",c);
}
void main()
{
  LinkList *L;
  LinkList *mid;
  mid = (struct LNode *)malloc(sizeof(struct LNode));

  ElemType *e,e0,*e1;
  Status i;
  int j,k;
  e = (ElemType *)malloc(sizeof(ElemType));
  e1 = (ElemType *)malloc(sizeof(ElemType));

  i = InitList(&L);
  for(j=1;j<=6;j++)
  {
    i = ListInsert(L,1,j);
  }
  printf("在L的表頭依次插入1~6后:L=");
    ListTraverse(L,visit);
    printf("L中間節點的值為mid=:");
    mid = Searchmid(L);
     printf("%d/n",mid->data);

      printf("L逆置后的輸出:L=");
      ListTraverse(reverse(L),visit);
    printf("L排序后依次為:L=");
    ListTraverse(sort(L),visit);

   
  i = ListEmpty(L);
  printf("L 是否為空:i=%d(1:是,0:否)/n",i);
  i = ClearList(L);
  printf("清空L后:L=");
  ListTraverse(L,visit);
  i = ListEmpty(L);
  printf("L是否為空:i=%d/n",i);
  for(j=1;j<=10;j++)
  {
    ListInsert(L,j,j);
  }
  printf("在L的表尾依次插入1~10后:L=");
  ListTraverse(L,visit);
  GetElem(L,5,e);
  printf("第5個元素的值為:%d/n",*e);
  for(j=0;j<=1;j++)
  {
    k = LocateElem(L,j,comp);
    if(k)
      printf("第%d個元素的值為%d/n",k,j);
    else
      printf("沒有值為%d的元素/n",j);
  }
  for(j=1;j<=2;j++)
  {
    GetElem(L,j,e1);
    i = PriorElem(L,*e1,e);
    if(i== INFEASIBLE)
      printf("元素%d無前驅/n",*e1);
    else
      printf("元素%d的前驅為:%d/n",*e1,*e);
  }
  for(j=ListLength(L) -1;j<=ListLength(L);j++)
  {
    GetElem(L,j,e1);
    i = NextElem(L,*e1,e);
    if(i==INFEASIBLE)
      printf("元素%d無后繼/n",*e1);
    else
      printf("元素%d的后繼為:%d/n",*e1,*e);
  }
   k = ListLength(L);
  for(j=k+1;j>=k;j--)
  {
    i = ListDelete(L,j,e);
    if(i==ERROR)
      printf("刪除第%d個數據失敗/n",j);
    else
      printf("刪除的元素為:%d/n",*e);
  }
  printf("依次輸出L的元素:");
    ListTraverse(L,visit);
  DestroyList(L);
  printf("銷毀L后:L=%u/n",L);
  printf("*************************************************/n");
  LinkList *La,*Lb;
  i = InitList(&La);
  if(i==1)
    for(j=1;j<=5;j++)
      i= ListInsert(La,j,j);
  printf("La=");
  ListTraverse(La,print);
  InitList(&Lb);
  for(j=1;j<=5;j++)
    i = ListInsert(Lb,j,2*j);
  printf("Lb = ");
  ListTraverse(Lb,print);
  Union(La,Lb);
  printf("new La=");
  ListTraverse(La,print);
  printf("*************************************************/n");
  LinkList *La_1,*Lb_1,*Lc_1;
  int a[4]={3,5,8,11},b[7]= {2,6,8,9,11,15,20};
  InitList(&La_1);
  for(j=1;j<=4;j++)
    ListInsert(La_1,j,a[j-1]);
  printf("La_1=");
  ListTraverse(La_1,print);
  InitList(&Lb_1);
  for(j=1;j<=7;j++)
    ListInsert(Lb_1,j,b[j-1]);
  printf("Lb_1=");
  ListTraverse(Lb_1,print);
  MergeList(La_1,Lb_1,&Lc_1);
  printf("Lc_1=");
  ListTraverse(Lc_1,print);
}

下面是在Linux下的部分運行結果:
復制代碼 代碼如下:

在L的表頭依次插入1~6后:L= 6 5 4 3 2 1
L中間節點的值為mid=:4
L逆置后的輸出:L= 1 2 3 4 5 6
L排序后依次為:L= 1 2 3 4 5 6
L 是否為空:i=0(1:是,0:否)
清空L后:L=
L是否為空:i=1
在L的表尾依次插入1~10后:L= 1 2 3 4 5 6 7 8 9 10
第5個元素的值為:5
沒有值為0的元素
第1個元素的值為1
元素1無前驅
元素2的前驅為:1
元素9的后繼為:10
元素10無后繼
刪除第11個數據失敗
刪除的元素為:10
依次輸出L的元素: 1 2 3 4 5 6 7 8 9
銷毀L后:L=7954544
*************************************************
La= 1 2 3 4 5
Lb = 2 4 6 8 10
new La= 1 2 3 4 5 6 8 10
*************************************************
La_1= 3 5 8 11
Lb_1= 2 6 8 9 11 15 20
Lc_1= 2 3 5 6 8 8 9 11 11 15 20

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠躁夜夜躁人人爽天天天天97| 亚洲色图50p| 国外色69视频在线观看| 亚洲一区二区三区在线视频| 日韩欧美国产成人| 国产亚洲精品久久久久久| 国产日韩欧美日韩大片| 日韩欧美亚洲国产一区| 日韩精品极品在线观看播放免费视频| 777777777亚洲妇女| 欧美日韩亚洲视频| 久久久欧美一区二区| 国产亚洲精品久久久久动| 欧美高清性猛交| 国产精品成人在线| 91sao在线观看国产| 91人人爽人人爽人人精88v| 欧美乱大交做爰xxxⅹ性3| 国产精品入口福利| 国产精品av在线播放| 日韩欧美精品网址| 欧美大奶子在线| 亚洲三级 欧美三级| 日韩av黄色在线观看| 91精品久久久久久久久不口人| 亚洲第一精品夜夜躁人人躁| 欧美日韩在线一区| 日韩一区二区福利| 国产区精品在线观看| 亚洲精品永久免费精品| 亚洲www永久成人夜色| 国产欧美日韩免费看aⅴ视频| 色偷偷av一区二区三区| 91chinesevideo永久地址| 中文字幕亚洲欧美日韩2019| 国产不卡av在线免费观看| 国产亚洲成av人片在线观看桃| 欧美理论片在线观看| 国产视频亚洲视频| 国产精品成人国产乱一区| 97热在线精品视频在线观看| 中文字幕亚洲无线码a| 欧美激情综合亚洲一二区| 欧美成人精品一区二区三区| 欧美成人免费观看| 亚洲黄色免费三级| 91精品国产成人| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品第七影院| 亚洲精品美女在线观看| 久久久精品网站| 亚洲成人xxx| 国产精品99久久久久久久久久久久| 久久综合五月天| 激情懂色av一区av二区av| 欧美日韩久久久久| 91香蕉嫩草神马影院在线观看| 91精品国产91久久久久福利| 九九热99久久久国产盗摄| 日韩av在线导航| 国产一区二区三区免费视频| 国内精品久久久久| 日韩精品免费在线视频观看| 精品久久久久久国产91| 日本成人激情视频| 欧美亚洲在线视频| 疯狂做受xxxx高潮欧美日本| 久久人人爽人人爽人人片av高请| 国产精品女人网站| 91亚洲精华国产精华| 亚洲精品v天堂中文字幕| 久久久久久国产精品| 亚洲老头同性xxxxx| 欧美精品一区二区免费| 九九九久久久久久| 国产精品激情av在线播放| 狠狠久久亚洲欧美专区| 成人国产精品色哟哟| 久久精品视频亚洲| 精品国产乱码久久久久酒店| 日韩欧美在线中文字幕| 亚洲国产天堂久久综合网| 中文字幕国产亚洲2019| 亚洲国产欧美一区二区三区同亚洲| 成人免费福利视频| 欧美大胆a视频| 黑人巨大精品欧美一区二区免费| 欧美性猛交xxxx免费看久久久| 国产精品美女主播在线观看纯欲| 欧美电影在线免费观看网站| 中文字幕免费国产精品| 国产一区二区在线免费视频| 日韩av最新在线| 欧美日韩美女在线观看| 久久6免费高清热精品| 亚洲精品久久视频| 精品福利在线看| 亚洲最新在线视频| 亚洲人成欧美中文字幕| 91精品免费视频| 亚洲黄色av网站| 永久免费精品影视网站| 亚洲一二三在线| 欧美午夜性色大片在线观看| 亚洲天堂免费观看| 精品国产区一区二区三区在线观看| 国产精品白嫩初高中害羞小美女| 精品国产欧美一区二区三区成人| 国产精品扒开腿爽爽爽视频| 亚洲欧美精品中文字幕在线| 在线观看不卡av| 国模吧一区二区三区| 中日韩美女免费视频网站在线观看| 亚洲高清一区二| 欧美小视频在线| 日韩av在线直播| 揄拍成人国产精品视频| 成人免费看片视频| 国产精品久久久久久亚洲影视| 亚洲国产成人久久综合一区| 日本国产欧美一区二区三区| 久久久久九九九九| 久久久天堂国产精品女人| 国产精品黄视频| 色午夜这里只有精品| 国产成人精品久久二区二区91| 欧美精品久久一区二区| 久久精品视频中文字幕| 欧美性猛交xxxx黑人| 亚洲影视九九影院在线观看| 亚洲欧美日韩精品久久亚洲区| 成人激情视频在线| 国产午夜精品一区二区三区| 国产一区二区成人| 国产97在线|日韩| 久久影院资源网| 久久视频免费在线播放| 久久999免费视频| 久久天堂av综合合色| 久久久久久久久中文字幕| 欧美电影免费观看网站| 欧美成人精品h版在线观看| 免费91在线视频| 91成人国产在线观看| 精品久久久久久电影| 亚洲国产三级网| 在线播放国产一区中文字幕剧情欧美| 久久精品成人欧美大片| 最近2019年中文视频免费在线观看| 久精品免费视频| 欧美性生交xxxxxdddd| 国产精品久久91| 欧美大胆a视频| 欧美裸体xxxx极品少妇| 国产综合在线观看视频| 亚洲精品大尺度| 亚洲国产精品久久久久秋霞不卡| 亚洲美女av黄| 亚洲精品欧美日韩专区| 亚洲一区二区自拍| 亚洲国产精品视频在线观看| 日韩av免费在线观看| 欧美成人免费va影院高清| 国模吧一区二区三区|