最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C數(shù)據(jù)結(jié)構(gòu)之單鏈表詳細示例分析

 更新時間:2013年08月13日 09:28:04   作者:  
以下是對C語言中的單鏈表進行了詳細的分析介紹,需要的朋友可以過來參考下
復(fù)制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
typedef struct type
{
 int num;
 struct type *next;
}TYPE;
//=============================================================
// 語法格式: TYPE *init_link_head(int n)
// 實現(xiàn)功能: 從頭到尾,正序創(chuàng)建一個具有n個節(jié)點的鏈表,并對其值進行初始化
// 參數(shù):  n: 鏈表的長度,即節(jié)點的個數(shù)
// 返回值:  所創(chuàng)建鏈表的首地址
//=============================================================
TYPE *init_link_head(int n)
{
 int i;
 TYPE *phead = NULL, *pf = NULL, *pi = NULL;
 for(i=0; i<n; i++)
 {
  pi = (TYPE *)malloc(sizeof(TYPE));
  printf("please inout num:\n");
  scanf("%d",&pi->num);
  if(i == 0)
   pf = phead = pi;
  else
  {
   pf->next = pi;
   pf = pi;
  }
  pi->next = NULL;
 }
 return phead;
}
//=============================================================
// 語法格式: TYPE *init_link_end(int n )
// 實現(xiàn)功能: 從尾到頭,倒序創(chuàng)建一個具有n個節(jié)點的鏈表,并對其值進行初始化
// 參數(shù):  n: 鏈表的長度,即節(jié)點的個數(shù)
// 返回值:  所創(chuàng)建鏈表的首地址
//=============================================================
TYPE *init_link_end(int n )
{
 TYPE *phead = NULL, *pi = NULL;
 int i ;
 for(i=0; i<n; i++)
 {
  pi = (TYPE *)malloc(sizeof(TYPE));
  printf("please inout num:\n");
  scanf("%d",&pi->num);
  if(i == 0)
   pi->next = NULL;
  else
   pi->next = phead;
  phead = pi;
 }
 return phead;
}
//=============================================================
// 語法格式: insert_link(TYPE * phead,TYPE * pi)
// 實現(xiàn)功能: 將新申請的節(jié)點加入到指定鏈表中
// 參數(shù):  *phead:待插入鏈表
//    * pi:帶插入節(jié)點
// 返回值:  插入指定節(jié)點后的新鏈表首址
//=============================================================
TYPE * insert_link(TYPE *phead, TYPE *pi)
{
 TYPE *pb, *pf;
 pb = phead;
 if(phead == NULL)
 {
  phead = pi;
  phead->next = NULL;
 }
 else
 {
  while((pi->num > pb->num) && (pb->next != NULL))
  {
   pf = pb;
   pb = pb->next;
  }
  if(pi->num <= pb->num)
  {
   if(pb == phead)
   {
    pi->next = phead;
    phead = pi;
   }
   else
   {
    pf->next = pi;
    pi->next = pb;
   }
  }
  else
  {
   pi->next = NULL;
   pb->next = pi;
  }
 }
 return phead;
}
//=============================================================
// 語法格式: delete_link(TYPE * phead,int num)
// 實現(xiàn)功能: 刪除給定序號所指向的節(jié)點
// 參數(shù):  *phead:待刪除鏈表
//    num: 所需刪除的節(jié)點
// 返回值:  刪除指定節(jié)點后的新鏈表首址
//=============================================================
TYPE * delete_link(TYPE *phead, int num)
{
 TYPE *pf;
 TYPE *pb;
 if(phead == NULL)
 {
  printf("\nempty link\n");
  return NULL;
 }
 pb = phead;
 while((pb->num != num) && pb->next != NULL)
 {
  pf = pb;
  pb = pb->next ;
 }
 if(pb->num == num)
 {
  if(pb == phead)
   phead = phead->next;
  else
   pf->next = pb->next;
  free(pb);
  printf("the node is deleted\n");
 }
 else
  printf("the node not found\n");
 return phead;
}
//=============================================================
// 語法格式: print_link(TYPE * phead)
// 實現(xiàn)功能: 打印指定鏈表中的全部節(jié)點數(shù)據(jù)
// 參數(shù):  *phead:待打印的鏈表首址
// 返回值:  無
//=============================================================
void print_link(TYPE *phead)
{
 TYPE *temp = phead;
 while( temp != NULL)
 {
  printf(" %d ",temp->num);
  temp = temp->next;
 }
}
//=============================================================
// 語法格式: search_num(TYPE * phead,int num)
// 實現(xiàn)功能: 在指定的鏈表中,按姓名查找指定元素
// 參數(shù):  phead:待查找的鏈首址,num需要查找的字符串
// 返回值:  無
//=============================================================
void search_num(TYPE *phead, int num)
{
 TYPE *temp = phead;
 while(temp != NULL)
 {
  if(temp->num == num)
   printf("  %d ",num);
  temp = temp->next;
 }
 if(temp == NULL)
  printf("node not been found\n");
}
//=============================================================
// 語法格式: order_link(TYPE * phead)
// 實現(xiàn)功能: 采用冒泡法,對指定鏈表按序號進行排序(交換數(shù)據(jù)域)
// 參數(shù):  phead:待排序的鏈首址
// 返回值:  排好序的鏈表phead指針
//=============================================================
TYPE *order_link(TYPE *phead)
{
 TYPE *pb,*pf,temp;
 pb = pf =phead;
 if(phead == NULL)
  return NULL;
 while(pb->next != NULL)
 {
  pf = pb->next;
  while(pf != NULL)
  {
   if(pb->num > pf->num)
   {
    temp = *pb;
    *pb = *pf;
    *pf = temp;
    temp.next = pb->next;
    pb->next = pf->next;
    pf->next = temp.next;
   }
   pf = pf->next;
  }
  pb = pb->next;
 }
 return phead;
}
//=============================================================
// 語法格式: reverse_link(TYPE * phead)
// 實現(xiàn)功能: 對給定鏈表按序號進行倒序排序
// 參數(shù):  phead:待排序的鏈首址
// 返回值:  排好序的鏈表phead指針
//=============================================================
TYPE *reverse_link(TYPE *phead)
{
 TYPE *pb, *pf, *temp;
 pb = phead;
 pf = pb->next;
 while(pf != NULL)
 {
  temp = pf->next;
  pf->next = pb;
  pb = pf;
  pf = temp;
 }
 phead->next = NULL;
 phead = pb;
 return phead;
}
//=============================================================
// 語法格式: free_all(TYPE * phead)
// 實現(xiàn)功能: 釋放鏈表中所有的節(jié)點
// 參數(shù):  phead:待釋放的鏈表首址
// 返回值:  無
//=============================================================
void free_all(TYPE *phead)
{
 TYPE *p;
 while(phead!=NULL)
 {
  p=phead->next;
  free(phead);
  phead=p;
 }
}
//=============================================================
// 語法格式: merge(TYPE *p1,TYPE *p2)
// 實現(xiàn)功能: 對兩個鏈表進行升序合并
// 參數(shù):  p1,p2兩個代合并的鏈表
// 返回值:  合并后的鏈表
//=============================================================
TYPE *merge_link(TYPE *p1, TYPE *p2)
{
 TYPE *p, *phead;
 if(p1 == NULL)
  return p2;
 if(p2 == NULL)
  return p1;
 if(p1->num < p2->num)
 {
  phead = p = p1;
  p1 = p1->next;
 }
 else
 {
  phead = p = p2;
  p2 = p2->next;
 }
 while(p1 != NULL && p2 != NULL)
 {
  if(p1->num < p2->num)
  {
   p->next = p1;
   p = p1;
   p1 = p1->next;
  }
  else
  {
   p->next = p2;
   p = p2;
   p2 = p2->next;
  }
 }
 if(p1 != NULL)
  p->next = p1;
 else
  p->next = p2;
 return phead;
}
//=============================================================
// 實現(xiàn)方法:   運用遞歸
// 語法格式: merge(TYPE *p1,TYPE *p2)
// 實現(xiàn)功能: 對兩個鏈表進行升序合并
// 參數(shù):  p1,p2兩個代合并的鏈表
// 返回值:  合并后的鏈表
//=============================================================
TYPE * merge_link_self(TYPE *p1, TYPE *p2)
{
 TYPE *phead = NULL;
 if(p1 == NULL)
  return p2;
 if (p2 == NULL)
  return p1;
 if(p1->num < p2->num)
 {
  phead = p1;
  phead->next =merge_link(p1->next, p2);
 }
 else
 {
  phead = p2;
  phead->next = merge_link(p1, p2->next);
 }
 return phead;
}
int main(void)
{
 return 0;
}

相關(guān)文章

  • C++數(shù)據(jù)結(jié)構(gòu)二叉搜索樹的實現(xiàn)應(yīng)用與分析

    C++數(shù)據(jù)結(jié)構(gòu)二叉搜索樹的實現(xiàn)應(yīng)用與分析

    從這篇博客開始,我就要和大家介紹有關(guān)二叉搜索樹的知識,它還衍生出了兩棵樹——AVL樹和紅黑樹,在后面兩篇博客我都會介紹。今天先從二叉搜索樹開始引入
    2022-02-02
  • VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行

    VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行

    本文主要介紹了VisualStudio2022下配置 OpenMP多線程編程環(huán)境與運行,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C語言實現(xiàn)自行車管理系統(tǒng)

    C語言實現(xiàn)自行車管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)自行車管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言聯(lián)合體Union特點及運用全面講解教程

    C語言聯(lián)合體Union特點及運用全面講解教程

    這篇文章主要為大家介紹了C語言聯(lián)合體Union特點及運用的全面講解教程有需要深度朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-10-10
  • C++高并發(fā)內(nèi)存池的實現(xiàn)

    C++高并發(fā)內(nèi)存池的實現(xiàn)

    本文主要介紹了C++高并發(fā)內(nèi)存池的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言代碼實現(xiàn)猜數(shù)字

    C語言代碼實現(xiàn)猜數(shù)字

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)猜數(shù)字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 使用C語言實現(xiàn)珠璣妙算Mastermind小游戲

    使用C語言實現(xiàn)珠璣妙算Mastermind小游戲

    這篇文章主要介紹了使用C語言實現(xiàn)珠璣妙算Mastermind小游戲,這是一款益智類多人游戲游戲,非常有趣,需要的朋友可以參考下
    2023-03-03
  • C語言取模取整的深入理解

    C語言取模取整的深入理解

    本文主要介紹了?C語言取模取整的深入理解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Mygui中文換行問題解決方案

    Mygui中文換行問題解決方案

    相信大家解決了中文輸入后一定會遇到如何解決中文輸入的問題,中文輸入換行問題是很多gui框架都存在的一個問題,需要的朋友可以了解下
    2012-11-11
  • 簡單總結(jié)C語言中各種類型的指針的概念

    簡單總結(jié)C語言中各種類型的指針的概念

    這篇文章主要簡單總結(jié)了C語言中各種類型的指針的概念,指針可以說是C語言本身所具有的最大特性,平時根據(jù)不同使用場合習(xí)慣地將其簡單分類,需要的朋友可以參考下
    2016-03-03

最新評論

元谋县| 永登县| 靖江市| 噶尔县| 威海市| 阿城市| 彩票| 潞城市| 包头市| 聂拉木县| 贵溪市| 什邡市| 莱芜市| 石楼县| 喀喇沁旗| 巴青县| 开远市| 胶南市| 集安市| 三门县| 齐齐哈尔市| 内乡县| 虎林市| 泾阳县| 衡东县| 邯郸县| 抚松县| 泸定县| 新田县| 绥化市| 内丘县| 东兴市| 南陵县| 三原县| 佛冈县| 民勤县| 阿合奇县| 尤溪县| 珠海市| 江北区| 桐城市|