国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > 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程序數據結構與算法設計有所幫助。

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

圖片精選

主站蜘蛛池模板: 页游| 崇左市| 佛坪县| 彭阳县| 永州市| 丹江口市| 乌拉特后旗| 佳木斯市| 正安县| 卓尼县| 金秀| 河东区| 罗城| 仪陇县| 蕲春县| 正蓝旗| 乌鲁木齐市| 大城县| 阿图什市| 开江县| 鹿泉市| 红河县| 惠东县| 龙口市| 防城港市| 彭阳县| 弥勒县| 景德镇市| 循化| 囊谦县| 崇文区| 炎陵县| 乐至县| 北宁市| 定襄县| 荣昌县| 疏勒县| 英超| 武义县| 册亨县| 建阳市|