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

首頁 > 編程 > C > 正文

C語言 數據結構鏈表的實例(十九種操作)

2020-01-26 14:00:56
字體:
來源:轉載
供稿:網友

C語言 數據結構鏈表的實例(十九種操作)

#include <stdio.h>#include <string.h>#include <stdlib.h>/*************************************************************************************//* 第一版博主 原文地址 http://www.cnblogs.com/renyuan/archive/2013/05/21/3091506.html *//* 第二版博主 原文地址 http://www.cnblogs.com/wireless-dragon/p/5170565.html *//* 2.創建線性表,此函數輸入不為正時終止讀取數據*//* 3.打印鏈表,鏈表的遍歷 *//* 4.查詢鏈表結點數并返回長度 *//* 5.檢查單鏈表是否為空 *//* 6.將線性表進行冒泡排序 *//* 7.查找單鏈表中第n個結點中的元素 *//* 8.從單鏈表中查找具有給定值number的第一個元素,返回該結點的地址 *//* 9.把單鏈表中第n個結點的值修改為number的值 *//* 10.向單鏈表的表頭插入一個元素 *//* 11.向單鏈表的末尾添加一個元素 *//* 12.向單鏈表中第n個結點位置插入元素為x的結點 *//* 13.向有序單鏈表中插入元素x結點,使得插入后仍然有序 *//* 14.從單鏈表中刪除表頭結點 *//* 15.從單鏈表中刪除表尾結點 *//* 16.從單鏈表中刪除第n個結點 *//* 17.從單鏈表中刪除值為x的第一個結點 *//* 18.交換2個元素的位置 *//* 19.刪除列表 *//*************************************************************************************/typedef int elemType;typedef struct NODE{  elemType element;  struct NODE *next;} Node;/* 2.創建線性表,此函數輸入不為正時終止讀取數據*/void creatList(Node **pHead){  printf("Please enter the list:/n");  Node *p1, *p2;  p1 = p2 = (Node *)malloc(sizeof(Node));  if (p1 == NULL || p2 == NULL)    exit(0);  memset(p1, 0, sizeof(Node));  scanf("%d", &p1->element);  p1->next = NULL;  while(p1->element > 0)  {    if (*pHead == NULL)      (*pHead) = p1;    else      p2->next = p1;    p2 = p1;    p1 = (Node *)malloc(sizeof(Node));    if (p1 == NULL)      exit(0);    memset(p1, 0, sizeof(Node));    scanf("%d", &p1->element);    p1->next = NULL;  }}/* 3.打印鏈表,鏈表的遍歷 */void printList(Node *pHead){  if (NULL == pHead)    printf("The list is empty/n");  else    while(NULL != pHead)    {      printf("%d ", pHead->element);      pHead = pHead->next;    }  printf("/n");}/* 4.查詢鏈表結點數并返回長度 */int sizeList(Node *pHead){  int size = 0;  while(pHead != NULL)  {    size ++;    pHead = pHead->next;  }  return size;}/* 5. 檢查單鏈表是否為空 */void isEmptyList(Node *pHead){  if (pHead == NULL)  {    printf("The list is empty/n");    exit(0);  }}/* 7.查找單鏈表中第n個結點中的元素 */void getElement(Node *pHead, int num){  for (int i = 1; i < num; ++i)    pHead = pHead->next;  printf("The value of the %dth element is:%d/n", num, pHead->element);}/* 8.從單鏈表中查找具有給定值number的第一個元素,返回該結點的地址 */int getElemAddr(Node *pHead, int number){  int i = 1;  while(pHead != NULL)  {    if (pHead->element == number)      return i;    i++;    pHead = pHead->next;  }  return 0;}/* 9.把單鏈表中第n個結點的值修改為number的值 */void modifyElem(Node **pList, int addr, int number){  Node *pHead; //在此處如果直接更改pList指向的話,主函數中調用printList就會從addr處開始打印  int i = 1;  pHead = *pList;  while(pHead != NULL)  {    if (i == addr)      break;    pHead = pHead->next;    i++;  }  pHead->element = number;}/* 10.向單鏈表的表頭插入一個元素 */void insertHeadList(Node **pHead){  Node *p1;  p1 = (Node *)malloc(sizeof(Node));  if (p1 == NULL)    exit(0);  memset(p1, 0, sizeof(Node));  printf("Please enter a number to be inserted:");  scanf("%d", &p1->element);  p1->next = (*pHead);// 此時pHead指向的是第一個結點(有數據域的),所以新的結點要插入到頭結點前  (*pHead) = p1; // pHead指向第一個結點}/* 11.向單鏈表的末尾添加一個元素 */void insertLastList(Node **pHead, int n){  Node *p1, *p2;  p2 = (*pHead);  int i;  for (i = 1; i < n; ++i)    p2 = p2->next;  p1 = (Node *)malloc(sizeof(Node));  if (p1 == NULL)    exit(0);  memset(p1, 0, sizeof(Node));  printf("Please enter a number to be inserted:");  scanf("%d", &p1->element);  p1->next = NULL;  p2->next = p1;}/* 12.向單鏈表中第n個結點位置插入元素為x的結點 */void isAddPos(Node **pHead, int length){  Node *p1, *p2;  int position, i;  printf("Please enter the insert position:");  scanf("%d", &position);  if (position > length || position <= 0)  {    printf("Input error, the program ends/n");    exit(0);  }  p1 = (Node *)malloc(sizeof(Node));  p2 = (*pHead);  if (p1 == NULL)    exit(0);  memset(p1, 0, sizeof(Node));  printf("Please enter a number to be inserted:");  scanf("%d", &p1->element);  for (i = 1; i < position - 1; ++i)    p2 = p2->next;  p1->next = p2->next;  p2->next = p1;}/* 6.將線性表進行冒泡排序 */void Arrange(Node **pHead, int length){  Node *p1;  p1 = (*pHead);  int i, j, temp;  for (i = length; i > 0; --i)  {    for(j = i - 1; j > 0; --j)    {      if ((p1->element) > (p1->next->element))      {        temp = p1->element;        p1->element = p1->next->element;        p1->next->element = temp;      }      p1 = p1->next;    }    p1 = (*pHead);  }}int OrrderList(Node **pHead, int length){  Node *p1, *p2;  p1 = (*pHead);  p2 = (Node *)malloc(sizeof(Node));  if (p2 == NULL)    exit(0);  memset(p2, 0, sizeof(Node));  printf("Enter the value of the element to be inserted:");  scanf("%d", &p2->element);  if (p2->element < p1->element)  {    p2->next = p1;    (*pHead) = p2;    return 1;  }  while(p1->next != NULL && p2->element > (p1->next->element))    p1 = p1->next;  if (p1->next == NULL)  {    p2->next = NULL;    p1->next = p2;    return 1;  }  else  {    p2->next = p1->next;    p1->next = p2;    return 1;  }}/* 14.從單鏈表中刪除表頭結點 */void DelHeadList(Node **pHead){  Node *p1;  p1 = (*pHead);  (*pHead) = (*pHead)->next;  free(p1);}/* 15.從單鏈表中刪除表尾結點 */void DelLastList(Node **pHead){  Node *p1, *p2;  p1 = (*pHead);  p2 = p1->next;  while(p2->next != NULL)  {    p2 = p2->next;    p1 = p1->next;  }  p1->next = NULL;  free(p2);}/* 16.從單鏈表中刪除第n個結點 */void DelPos(Node **pHead, int length){  int n, i;  Node *p1, *p2;  p1 = (*pHead);  p2 = p1->next;  printf("Please enter the serial number number to delete:");  scanf("%d", &n);  if (n < 1 || n > length)    exit(0);  for (i = 1; i < n - 1; ++i)  {    p2 = p2->next;    p1 = p1->next;  }  p1->next = p2->next;  free(p2);}/* 17.從單鏈表中刪除值為x的第一個結點 */int Delx(Node **pHead){  Node *p1, *p2;  p1 = (*pHead);  p2 = p1->next;  int number;  printf("Please input is going to be deleted the value of x:");  scanf("%d", &number);  if (number == (*pHead)->element)  {    (*pHead) = (*pHead)->next;    free(p1);    return 1;  }  while(p2 != NULL)  {    if (p2->element == number)    {      break;    }    p2 = p2->next;    p1 = p1->next;  }  if (p2 == NULL)  {    printf("X does not exist in the list/n");    return 1;  }  else  {    p1->next = p2->next;    free(p2);    return 1;  }}/* 18.交換2個元素的位置 */void exchange2pos(Node **pHead, int length){  Node *p1, *p2;  int n1, n2, i, j, temp;  printf("Please enter the first number:");  scanf("%d", &n1);  printf("Please enter the second number:");  scanf("%d", &n2);  if (n1 < 1 || n1 > length || n2 < 1 || n2 > length)    exit(0);  p1 = p2 = (*pHead);  for (i = 1; i < n1; ++i)  {    p1 = p1->next;  }  for (j = 1; j < n2; ++j)  {    p2 = p2->next;  }  temp = p1->element;  p1->element = p2->element;  p2->element = temp;}/* 刪除列表 */void clearList(Node **pHead){  Node *p1;  p1 = (*pHead);  while(p1 != NULL)  {    p1 = p1->next;    free((*pHead));    (*pHead) = p1;  }}int main(int argc, char const *argv[]){  /* 1.初始化線性表,即置單鏈表的表頭指針為空 */  Node *pList = NULL;  int length = 0, n, addr, number;  /* 2.創建線性表,此函數輸入不為正時終止讀取數據*/  printf("- - - - - - - - - 2 - - - - - - - -/n");  creatList(&pList);  /* 5. 檢查單鏈表是否為空 */  isEmptyList(pList);  printList(pList);  /* 4.查詢鏈表結點數并返回長度 */  printf("- - - - - - - - - 4 - - - - - - - -/n");  length = sizeList(pList);  printf("the Node length is:%d/n", length);  /* 7.查找單鏈表中第n個結點中的元素 */  printf("- - - - - - - - - 7 - - - - - - - -/n");  printf("Please input node number (n):");  scanf("%d", &n);  if (n > length || n < 1)  {    printf("N is not within the scope of/n");    exit(0);  }  getElement(pList, n);  /* 8.從單鏈表中查找具有給定值number的第一個元素,返回該結點的地址 */  printf("- - - - - - - - - 8 - - - - - - - -/n");  addr = 0;  number;  printf("Please enter to find element value (number):");  scanf("%d", &number);  addr = getElemAddr(pList, number);  if (addr == 0)    printf("List the element/n");  else    printf("The location of the number is:%d/n", addr);  /* 9.把單鏈表中第n個結點的值修改為number的值 */  printf("- - - - - - - - - 9 - - - - - - - -/n");  addr = 0;  number = 0;  printf("Please input to replace the serial number (n):");  scanf("%d", &addr);  if (addr > length || addr < 0)  {    printf("N is not within the scope of/n");    exit(0);  }  printf("Please input to replace the contents of the (number):");  scanf("%d", &number);  modifyElem(&pList, addr, number);  printf("The revised list is:/n");  printList(pList);  /* 10.向單鏈表的表頭插入一個元素 */  printf("- - - - - - - - - 10 - - - - - - - -/n");  insertHeadList(&pList);  printList(pList);  /* 11.向單鏈表的末尾添加一個元素 */  printf("- - - - - - - - - 11 - - - - - - - -/n");  insertLastList(&pList, length);  printList(pList);  /* 12.向單鏈表中第n個結點位置插入元素值為x的結點 */  printf("- - - - - - - - - 12 - - - - - - - -/n");  isAddPos(&pList, length);  printList(pList);  /* 6.將線性表進行冒泡排序 */  printf("- - - - - - - - - 6 - - - - - - - -/n");  Arrange(&pList, length);  printList(pList);  /* 13.向有序單鏈表中插入元素x結點,使得插入后仍然有序 */  printf("- - - - - - - - - 13 - - - - - - - -/n");  OrrderList(&pList, length);  printList(pList);  /* 14.從單鏈表中刪除表頭結點 */  printf("- - - - - - - - - 14 - - - - - - - -/n");  DelHeadList(&pList);  printList(pList);  /* 15.從單鏈表中刪除表尾結點 */  printf("- - - - - - - - - 15 - - - - - - - -/n");  DelLastList(&pList);  printList(pList);  /* 16.從單鏈表中刪除第n個結點 */  printf("- - - - - - - - - 16 - - - - - - - -/n");  DelPos(&pList, length);  printList(pList);  /* 17.從單鏈表中刪除值為x的第一個結點 */  printf("- - - - - - - - - 17 - - - - - - - -/n");  Delx(&pList);  printList(pList);  /* 18.交換2個元素的位置 */  printf("- - - - - - - - - 18 - - - - - - - -/n");  exchange2pos(&pList, length);  printList(pList);  /* 19.刪除列表 */  printf("- - - - - - - - - 19 - - - - - - - -/n");  clearList(&pList);  printList(pList);  return 0;}

以上就是C語言數據結構單鏈表的操作,所有基礎操作都包含在內,很全面,本站對于數據結構的文章還很多,希望大家搜索查閱,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片欧美日产| 亚洲精品99999| 欧美亚洲视频一区二区| 亚洲精品中文字| 精品久久久久人成| 日韩精品亚洲元码| 欧美性色xo影院| 日韩一区二区在线视频| 欧美亚洲一区在线| 狠狠综合久久av一区二区小说| 欧美精品videos另类日本| 国产欧美一区二区三区在线看| 亚洲黄色在线观看| 韩国国内大量揄拍精品视频| 国产精品成人播放| 日本国产高清不卡| 日韩成人av一区| 国产精品扒开腿做爽爽爽男男| 久久九九有精品国产23| 久久成人在线视频| 国产精品国产福利国产秒拍| 久久久中精品2020中文| 69影院欧美专区视频| 国产精品一区二区三区免费视频| 欧美一性一乱一交一视频| 国产精品综合不卡av| 国产最新精品视频| 久久影院模特热| 色综合91久久精品中文字幕| 美日韩精品免费观看视频| 欧美精品情趣视频| 国产精品成人国产乱一区| 色天天综合狠狠色| 欧美一级淫片丝袜脚交| 国产成人精彩在线视频九色| 北条麻妃在线一区二区| 97在线视频免费| 久久久精品国产一区二区| 国产suv精品一区二区| 欧美成人精品在线播放| 国产成人高清激情视频在线观看| 日韩精品在线观| 日韩在线观看免费网站| 久久国产精品偷| 91色中文字幕| 欧亚精品中文字幕| 久久久久免费精品国产| 国产精品一区二区久久久久| 欧美性猛交xxxx久久久| 91av在线影院| 国产精品99久久久久久白浆小说| 亚洲最大中文字幕| 日本伊人精品一区二区三区介绍| 亚洲天天在线日亚洲洲精| 久久亚洲精品一区| 日本欧美黄网站| 在线观看国产欧美| 精品国产一区二区三区久久久狼| 亚洲第一区在线观看| 精品中文字幕在线2019| 亚洲欧美www| 亚洲最大av在线| 日韩欧美亚洲一二三区| 亚洲欧洲国产伦综合| 国产精品电影久久久久电影网| 欧美色欧美亚洲高清在线视频| 一区二区三区日韩在线| 中文字幕日本精品| 亚洲精品国产精品国自产在线| 久久精品国产综合| 91精品在线影院| 91精品国产综合久久香蕉的用户体验| 国产精品美腿一区在线看| 国产日韩综合一区二区性色av| 欧美成人sm免费视频| 国产日韩在线亚洲字幕中文| 色爱精品视频一区| 久久久久久12| 国内精品久久久久久中文字幕| 国产精品无av码在线观看| 国模极品一区二区三区| 欧美制服第一页| 日韩视频免费在线观看| 色综合导航网站| 97国产一区二区精品久久呦| 51色欧美片视频在线观看| 亚洲乱码国产乱码精品精天堂| 国产精品旅馆在线| 黑人巨大精品欧美一区二区一视频| 国产精品高潮粉嫩av| 欧美另类精品xxxx孕妇| 欧美日韩第一视频| 亚洲人成电影网站色…| 国内精久久久久久久久久人| 亚洲国产中文字幕久久网| 欧美xxxx14xxxxx性爽| 国产在线精品成人一区二区三区| 日韩在线观看免费全集电视剧网站| 欧美丝袜第一区| 中文字幕在线日韩| 国产欧美日韩精品专区| 亚洲激情视频网站| 亚洲第一中文字幕| 亚洲性视频网址| 欧美人与性动交| 一区二区在线视频| 欧美日韩在线视频观看| 中文字幕日韩精品有码视频| 日韩成人久久久| 国产欧美va欧美va香蕉在| 91av视频在线| 欧美电影免费观看高清完整| 日本免费久久高清视频| 亚洲女同性videos| 日韩电视剧在线观看免费网站| 久久久精品美女| 久久九九国产精品怡红院| 欧美一级淫片aaaaaaa视频| 国产精品久久二区| 91精品国产网站| 欧美日韩国产综合视频在线观看中文| 亚洲老板91色精品久久| 欧美视频在线视频| 欧美电影在线观看| 亚洲综合第一页| 国产精品入口夜色视频大尺度| 深夜精品寂寞黄网站在线观看| 久久九九有精品国产23| 国产69精品久久久久9999| 91精品国产色综合久久不卡98| 欧美一级视频一区二区| 日韩av色在线| 欧美激情精品久久久久久免费印度| 中日韩美女免费视频网址在线观看| 97超碰色婷婷| 91成人在线视频| 亚洲精品视频在线观看视频| 国产亚洲aⅴaaaaaa毛片| 日韩高清免费观看| 日韩网站在线观看| 色偷偷88888欧美精品久久久| 中文字幕亚洲情99在线| 伊人男人综合视频网| 91大神在线播放精品| 成人在线观看视频网站| 欧美日韩高清区| 美女撒尿一区二区三区| 亚洲sss综合天堂久久| 51精品国产黑色丝袜高跟鞋| 欧美激情一区二区三区成人| 国产精品黄色影片导航在线观看| 国产欧美一区二区三区在线| 欧美一级片在线播放| 国产精品视频男人的天堂| 26uuu久久噜噜噜噜| 亚洲色图35p| 亚洲精品一区中文字幕乱码| 高清视频欧美一级| 久久国产精品99国产精| 国模私拍视频一区| 欧美大胆a视频| 粉嫩av一区二区三区免费野| 精品国产91久久久久久老师| 久久精品成人动漫|