連結串列基本操作(建立,插入,查詢,刪除)-C語言
Demo地址:https://github.com/RainManGO/NodeLink
工具:Xcode
// | |
// main.c | |
// Node | |
// | |
// Created by apple on 2018/1/3. | |
// Copyright © 2018年 ZY. All rights reserved. | |
// | |
#include <stdio.h> | |
#include <stdlib.h> | |
typedef struct Student{ | |
float score; | |
struct Student * next; | |
}STU; | |
#pragma mark 連結串列的建立 | |
#if 0 | |
//頭插入法建表 | |
STU * creat_LinkList(int n) | |
{ | |
float score; | |
STU *head, *p; | |
head = (STU *)malloc(sizeof(STU)); | |
head->next = NULL; | |
for (int i=0; i<n; i++) { | |
printf("請輸入分數:"); | |
scanf("%f",&score); | |
p = (STU *)malloc(sizeof(STU)); | |
if (p!=NULL) { | |
p->score = score; | |
p->next = head->next; | |
head->next = p; | |
}else{ | |
printf("分配記憶體失敗"); | |
} | |
} | |
return head; | |
} | |
#else | |
//尾插入建表 | |
STU * creat_LinkList(int n){ | |
float score; | |
STU * head , *p,*q; | |
head = p = (STU *)malloc(sizeof(STU)); | |
p->next=NULL; | |
for (int i=0; i<n; i++) { | |
printf("請輸入分數:"); | |
scanf("%f",&score); | |
q = (STU *)malloc(sizeof(STU)); | |
if (p!=NULL) { | |
q->score = score; | |
q->next=p->next; | |
p->next = q; | |
p=q; | |
}else{ | |
printf("分配記憶體失敗"); | |
} | |
} | |
return head; | |
} | |
#endif | |
#pragma mark 連結串列的查詢 | |
//指定個數查詢 | |
float getScore(STU * Node,int i){ | |
int j = 1; | |
STU * p = Node->next; | |
while (p->next!=NULL&&j<i){ | |
p=p->next; | |
j++; | |
}; | |
if (i==j) { | |
return p->score; | |
}else{ | |
return 0.f; | |
} | |
} | |
//根據資料值查詢節點 | |
STU * getStudent(STU * headLink,float score){ | |
STU * p = headLink; | |
while (p->next!=NULL||p->score!=score) { | |
p=p->next; | |
} | |
if (p->score==score) { | |
return p; | |
} | |
return NULL; | |
} | |
#pragma mark 連結串列的插入 | |
STU * insertStudent(STU * headLink,int i,float score){ | |
int j=1; | |
STU * q; | |
STU * p = headLink->next; | |
while (p!=NULL &&j<i-1) { | |
p=p->next; | |
j++; | |
} | |
if (j==i-1) { | |
q = (STU*)malloc(sizeof(STU)); | |
q->score = score; | |
q->next=p->next; | |
p->next=q; | |
} | |
return headLink; | |
} | |
#pragma mark 連結串列的刪除 | |
//刪除第幾個節點 | |
STU * deleteStudent(STU * headLink,int i){ | |
int j; | |
STU *p,*q; | |
p = headLink;j=0; | |
q = headLink->next; | |
while (p->next!=NULL&&j<i) { | |
p=q; | |
q=q->next; | |
j++; | |
} | |
if (j==i) { | |
p->next=q->next; | |
free(q); | |
} | |
return headLink; | |
} | |
//按值刪除所有節點 | |
STU * deleteStudentByScore(STU * headLink,float score){ | |
STU *p,*q; | |
p = headLink; | |
q = headLink->next; | |
while (p!=NULL) { | |
if (q->score==score) { | |
p->next=q->next; | |
free(q); | |
q=p->next; | |
}else{ | |
p=q; | |
q=q->next; | |
} | |
} | |
return headLink; | |
} | |
//刪除重複節點 | |
void deleteSameDataNode(STU * headLink){ | |
STU *p,*q,*p1; | |
p=headLink->next; | |
while (p->next!=NULL) { | |
q=p; | |
p1=p->next; | |
while (p1->next!=NULL) { | |
if (p->score==p1->score) { | |
q->next=p1->next; | |
free(p1); | |
p1=q->next; | |
}else{ | |
q=p1; | |
p1=p1->next; | |
} | |
} | |
p=p->next; | |
} | |
} | |
void printfLink(STU * headLink){ | |
STU * p = headLink->next; | |
printf("列印連結串列如下:\n"); | |
while (p!=NULL) { | |
printf("%.2f\n",p->score); | |
p=p->next; | |
} | |
printf("\n"); | |
} | |
int main(int argc, const char * argv[]) { | |
//建立連結串列 | |
STU * nodeLink = creat_LinkList(5); | |
printfLink(nodeLink); | |
//根據序號查詢連結串列節點值 | |
printf("第%d個連結串列值為:%.2f\n",3,getScore(nodeLink,3)); | |
//連結串列值的插入 | |
insertStudent(nodeLink,4,6.6); | |
printfLink(nodeLink); | |
//刪除連結串列的值 | |
deleteStudent(nodeLink,1); | |
printfLink(nodeLink); | |
//刪除重複節點 | |
deleteSameDataNode(nodeLink); | |
printfLink(nodeLink); | |
return 0; | |
} |
列印結果:
請輸入分數:2
請輸入分數:3
請輸入分數:3
請輸入分數:4
請輸入分數:2
列印連結串列如下:
2.00
3.00
3.00
4.00
2.00
第3個連結串列值為:3.00
列印連結串列如下:
2.00
3.00
3.00
6.60
4.00
2.00
列印連結串列如下:
2.00
3.00
6.60
4.00
2.00
列印連結串列如下:
2.00
3.00
6.60
4.00
2.00
Program ended with exit code: 0
相關文章
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- 雙向連結串列————查詢、刪除、插入結點
- AVL樹(查詢、插入、刪除)——C語言C語言
- 資料結構__連結串列_單連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 二叉查詢樹(查詢、插入、刪除)——C語言C語言
- 單向迴圈連結串列——查詢、刪除、插入結點
- 單連結串列的插入刪除操作(c++實現)C++
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- 資料結構_連結串列_單向迴圈連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構_連結串列_雙向迴圈連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構_連結串列_單向迴圈連結串列 & 雙向連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構_連結串列_雙向迴圈連結串列 & 棧 的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 雙向連結串列的操作(插入和刪除)
- C語言單向連結串列的增刪操作C語言
- 單向連結串列————遍歷、查詢、插入結點 (基於C語言實現)C語言
- 詳解雙向連結串列的基本操作(C語言)C語言
- 為什麼陣列查詢比連結串列要快?而插入刪除比連結串列效率低陣列
- 單向加頭連結串列的[構建、插入、刪除、查詢、輸出]
- 雙向迴圈連結串列:(建立、插入、遍歷、求長、查詢、刪除、排序、銷燬)待測排序
- c語言順序棧常規插入刪除操作C語言
- C語言資料結構:雙向連結串列的增刪操作C語言資料結構
- 雙向迴圈連結串列基本操作的實現(C語言)C語言
- C\C++之用結構體實現連結串列的建立、遍歷、結點插入、結點刪除C++結構體
- 資料結構:單迴圈連結串列的建立插入與刪除資料結構
- C語言 連結串列排序C語言排序
- C語言資料結構:單向迴圈連結串列的增刪操作C語言資料結構
- C語言資料結構:雙向迴圈連結串列的增刪操作C語言資料結構
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- 雙向連結串列的建立及基本操作
- (c語言實現)刪除有序連結串列中重複出現的元素C語言
- C語言線性連結串列C語言
- C語言實現連結串列C語言
- 簡單查詢、插入、更新、刪除SQL語句SQL
- 複習下C 連結串列操作(雙向迴圈連結串列,查詢迴圈節點)
- 建立連結串列並進行增加、刪減操作
- 雙向迴圈連結串列————遍歷、查詢、插入結點
- 單連結串列功能函式練習——按規定插入指定節點及刪除最小值節點(C語言)函式C語言
- C++資料結構連結串列的基本操作C++資料結構