a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言實現帶頭結點的鏈表的創建、查找、插入、刪除操作

2020-01-26 15:19:11
字體:
來源:轉載
供稿:網友

本文實例講述了C語言實現帶頭結點的鏈表的創建、查找、插入、刪除操作。是數據結構中鏈表部分的基礎操作。分享給大家供大家參考。具體方法如下:

#include <stdio.h>#include <stdlib.h>typedef struct node{  int data;  struct node* next;// 這個地方注意結構體變量的定義規則} Node, *PNode;Node* createLinklist(int length){  int i = 0;  PNode pHeader = NULL;  PNode pTail = NULL;  PNode pTemp = NULL;  printf("create/n");  pHeader = (PNode)malloc(sizeof(Node));// 申請頭結點  if (!pHeader)  {    exit(-1);  }  pHeader->next = NULL;  for (i = 0; i < length; i++)  {    pTemp = (PNode)malloc(sizeof(Node));// 用malloc要包含頭文件    if (!pTemp)    {      exit(-1);    }    pTemp->data = i*10;    pTemp->next = NULL;    if (!pHeader->next)    {      // 第一個結點是空的,則先連接第一個結點      pHeader->next = pTemp;    }    else    {      pTail->next = pTemp;    }    pTail = pTemp;  }  return pHeader;}Node* search(PNode pHeader, int k){  PNode p = pHeader->next;  int i = 1;  printf("search/n");  while(p && (i < k))  {    p = p->next;    i++;  }  if (p && (i == k)) // 這步的i == k是必須的,  // 因為如果一開始的時候 i就 >= k并且pHeader->next還不為NULL這一步就會必過,導致返回的是第一個元素的值  {    return p;  }  return NULL;}int insert(PNode pHeader, PNode pNew, int k){  PNode p = NULL;  printf("insert/n");  if ( 1 == k )  {    p = pHeader;  }  else  {    printf("==>");    p = search(pHeader, k-1);  }  if (p)  {    // 帶頭結點和不帶頭結點的主要區別之一就在這    // 如果不帶頭結點,那么在第一個位置插入結點的操作應該是    // pNew->next = p;    // p = pNew;    // 帶頭結點的操作如下    pNew->next = p->next;    p->next = pNew;    return 1;  }  return 0;}int deleteNode(PNode pHeader, int k){  PNode p = NULL;  printf("deleteNode/n");  if (1 == k)  {    p = pHeader->next;  }  else  {    printf("==>");    p = search(pHeader, k-1);  }  if (p && p->next)  {    // 不帶頭結點的操作時刪除第一個結點的操作    // Node* temp = p;    // p = p->next;    // free(temp);    // 帶頭結點的操作如下    PNode temp = p->next;    p->next = temp->next;    free(temp);    return 1;  }  else  {    printf("Not Found/n");    return 0;  }}void print(PNode pHeader){  PNode p = pHeader->next;  printf("print/n ");  while(p)  {    printf("%4d ", p->data);    p = p->next;  }  putchar('/n');}void freeList(PNode pH){  PNode p = NULL;  printf("freeList/n");  while(NULL != pH)  {    p = pH;    pH = pH->next;    printf("%4d be freed/n", p->data);    free(p);  }}int main(void){  PNode pHeader = NULL;// C和C++中判斷指針為空都是用NULL宏(全大寫)  PNode pNew = NULL;  PNode result = NULL;  pHeader = createLinklist(10);  print(pHeader);  result = search(pHeader, 5);  if ( result )  {    printf("%d/n", result->data);  }  else  {    printf("Not Found/n");  }  pNew = (PNode)malloc(sizeof(Node));  if (!pNew)  {    exit(-1);  }  pNew->data = 100;  pNew->next = NULL;  insert(pHeader, pNew, 5);  print(pHeader);  deleteNode(pHeader, 12);  print(pHeader);  freeList(pHeader);  return 0;}

上述實例備有較為詳盡的注釋,相信不難理解。希望本文所述對大家C程序數據結構與算法設計有所幫助。

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

圖片精選

主站蜘蛛池模板: 操老逼 | 欧美视频在线观看 | 超碰中文字幕 | 18毛片 | 国产精品久久久久久久久久 | 久久精品视频18 | 中文字幕亚洲天堂 | 亚洲精品视频导航 | 欧美日韩国产中文字幕 | 中文字幕一区二区三区不卡 | 国产欧美在线视频 | 欧美精品在线观看一区二区 | www日本高清视频 | 色橹橹欧美在线观看视频高清 | 日本一区二区高清 | 成人福利在线 | 久久精品福利 | 欧美成人h版在线观看 | 午夜免费小视频 | 欧美日韩免费一区二区三区 | 欧美日韩一区二区三区在线观看 | 日韩欧美高清 | 成人欧美 | 青青草国产在线 | 国产精品揄拍一区二区久久国内亚洲精 | 亚洲国产精品一区二区三区 | 成人在线免费视频 | 大胆裸体gogo毛片免费看 | 成人午夜免费视频 | 国产成人免费网站 | 国产精品一码二码三码在线 | 国产日产久久欧美清爽 | 日韩久久综合 | 99动漫| julia中文字幕久久一区二区 | 99久久99热这里只有精品 | 久久国产精品一区 | 欧美国产视频 | 欧美日韩色图 | 日韩一区二区在线观看 | 日韩一区二区三区四区五区 |