一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言如何建立鏈表并實現增刪查改詳解

C語言如何建立鏈表并實現增刪查改詳解

2021-08-01 12:42GershonHold C/C++

這篇文章主要給大家介紹了關于C語言如何建立鏈表并實現增刪查改的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

以下是本人完成的一個C語言建立鏈表并進行增刪查改操作的程序,為方便學習,本人將整個程序分為頭文件和主函數兩部分:

1.頭文件(函數部分)

(1)初始化函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
 
typedef struct {
 int *head;
 int length;
 int capacity;
} Toslist; //Toslist類型
 
 
//初始化順序表
Toslist initSeqlist() {
 Toslist list;
 list.length = 0;
 list.capacity = 5;
 list.head = (int *)malloc(10 * sizeof(int));
 
 if (!list.head)
 {
 printf("初始化失敗!\n");
 exit(0);
 }
 return list;
}

(2)打印函數

?
1
2
3
4
5
6
7
//打印順序表
void displayList(Toslist list) {
 for (int i = 0; i < list.length; i++) {
 printf("%d ", list.head[i]);
 }
 printf("\n");
}

(3)插入函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//插入元素
Toslist add(Toslist list, int elem, int pos) {
 if (list.length == list.capacity) {
 int *temp = (int *)realloc(list.head, (list.capacity + 1) * sizeof(int));//判斷空間是否足夠,不夠就另建鏈表
 
//不直接用head而引入temp的作用:防止空間分配失敗導致head失去原來的鏈表
 if (!temp) {
  list.head = temp;
  list.capacity += 1;
 }
 }
 
 //插入位置及以后的元素后移
 
 for (int i = list.length - 1; i >= pos; i--) {
 list.head[i + 1] = list.head[i];
 }
 list.head[pos] = elem;
 list.length ++;
 return list;
 
 if (pos > list.length || pos < 0)
 printf("插入位置錯誤!\n");
 return list;
}

(4)刪除函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//刪除元素
Toslist delete(Toslist list, int pos) {
 
 for (int i = pos; i < list.length - 1; i++) {
 list.head[i] = list.head[i + 1];
 }
 
 list.length--;
 
 return list;
 
 if (pos < 0 || pos > list.length) {
 printf("刪除位置有誤!\n");
 return list;
 }
}

(5)查找函數

?
1
2
3
4
5
6
7
8
9
10
//查
int search(Toslist list, int elem) { //elem是查找的元素
 //順序查找
 for (int i = 0; i < list.length; i++) {
 if (elem == list.head[i]) {
  return i;
 }
 }
 return 0;
}

(6)替換函數

?
1
2
3
4
5
6
//改
Toslist modify(Toslist list, int elem, int val) { //val是要替換它的元素
 int pos = search(list, elem); //獲取要替換元素的位置
 list.head[pos] = val;
 return list;
}

2.主函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
int main() {
 Toslist list = initSeqlist();
 int Addpos = -1, Addnum, Delpos, Serachnum,Modifynum;
 
 printf("請輸入5個整數元素\n");
 
 for (int i = 0; i < 5; i++) {
 scanf("%d", &list.head[i]);
 list.length++;
 }
 
 printf("順序表中的元素有:\n");
 displayList(list);
 
 //插入元素
 printf("要在哪個元素后插入元素?\n");
 while (Addpos < 0 || Addpos > list.length) {
 scanf("%d", &Addpos);
 
 if (Addpos < 0 || Addpos > list.length)
  printf("請輸入正確的位置!\n");
 };
 
 printf("請輸入需要插入的元素:\n"); scanf("%d", &Addnum);
 printf("在順序表的第%d個元素后插入元素%d得到\n", Addpos, Addnum);
 list = add(list, Addnum, Addpos);
 
 displayList(list);
 
 
 //刪除元素
 printf("要刪除順序表下標順序中哪個元素?\n"); scanf("%d", &Delpos);
 printf("刪除后得到:\n");
 
 list = delete(list, Delpos);
 displayList(list);
 
 
 //查找
 printf("請輸入需要查找的元素\n"); scanf("%d", &Serachnum);
 
 int pos = search(list, Serachnum);
 if(pos)
 printf("元素%d的位置為第%d個\n", Serachnum, pos+1);
 if(!pos){
 printf("表中無該元素\n");
 }
 
 
 //修改
 printf("請輸入需要修改的元素:\n");scanf("%d",&Serachnum);
 printf("請輸入要替換的數:\n");scanf("%d",&Modifynum);
 printf("將%d修改為%d得到:\n", Serachnum, Modifynum);
 list = modify(list, Serachnum, Modifynum);
 displayList(list);
 
 free(list.head);
 list.head = NULL;
 
 return 0;
}

以上程序本人已調試完畢,若程序有繁雜之處,歡迎批評指正!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://segmentfault.com/a/1190000020000967

延伸 · 閱讀

精彩推薦
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
主站蜘蛛池模板: 色屁屁二区 | 我的奶头被客人吸的又肿又红 | 国产一成人精品福利网站 | a级黄色视屏 | 国产一级在线观看视频 | 国产麻豆精品入口在线观看 | 色婷婷天天综合在线 | tk白丝丨vk | 成品人视频w免费观看w | 4tube欧美高清 | 国产精品久久久精品日日 | 亚洲人成网站在线观看青青 | 日韩福利网 | 国产成人福利美女观看视频 | 精品一二三区久久AAA片 | 奇米狠狠色 | 国产一区二区三区四区波多野结衣 | 国产小视频免费看 | 好大好硬好湿好紧h | 91制片厂制作果冻传媒123 | 国产精品第2页 | 国产3344视频在线观看免费 | 日产2021免费一二三四区 | 熟睡中的麻麻大白屁股小说 | 九九九九九九精品免费 | 日日综合| 国内精品久久久久久久 | 波多野结衣教师未删减版 | 轻轻色在线视频中文字幕 | 久热在线这里只有精品7 | 4455永久在线视频观看 | 亚洲精品一区二区久久久久 | jux539原千岁在线播放 | 欧美伦乱 | 免费观看无人区完整版 | 羞羞视频麻豆 | 蜜桃视频一区二区 | 2020年精品国产午夜福利在线 | 国产精品露脸国语对白99 | 亚洲 欧美 国产 日韩 字幕 | 精品视频一区二区三区免费 |