国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

服務(wù)器之家 - 編程語言 - C/C++ - C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作

C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作

2021-02-02 14:24C語言程序設(shè)計(jì) C/C++

這篇文章主要介紹了C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作方法,對(duì)于了解數(shù)據(jù)結(jié)構(gòu)中鏈表的各項(xiàng)操作有很好的借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了C語言實(shí)現(xiàn)帶頭結(jié)點(diǎn)的鏈表的創(chuàng)建、查找、插入、刪除操作。是數(shù)據(jù)結(jié)構(gòu)中鏈表部分的基礎(chǔ)操作。分享給大家供大家參考。具體方法如下:

?
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node
{
  int data;
  struct node* next;// 這個(gè)地方注意結(jié)構(gòu)體變量的定義規(guī)則
} 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));// 申請(qǐng)頭結(jié)點(diǎn)
  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)
    {
      // 第一個(gè)結(jié)點(diǎn)是空的,則先連接第一個(gè)結(jié)點(diǎn)
      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是必須的,
  // 因?yàn)槿绻婚_始的時(shí)候 i就 >= k并且pHeader->next還不為NULL這一步就會(huì)必過,導(dǎo)致返回的是第一個(gè)元素的值
  {
    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)
  {
    // 帶頭結(jié)點(diǎn)和不帶頭結(jié)點(diǎn)的主要區(qū)別之一就在這
    // 如果不帶頭結(jié)點(diǎn),那么在第一個(gè)位置插入結(jié)點(diǎn)的操作應(yīng)該是
    // pNew->next = p;
    // p = pNew;
    // 帶頭結(jié)點(diǎn)的操作如下
    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)
  {
    // 不帶頭結(jié)點(diǎn)的操作時(shí)刪除第一個(gè)結(jié)點(diǎn)的操作
    // Node* temp = p;
    // p = p->next;
    // free(temp);
    // 帶頭結(jié)點(diǎn)的操作如下
    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;
}

上述實(shí)例備有較為詳盡的注釋,相信不難理解。希望本文所述對(duì)大家C程序數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 视频一区在线 | 日韩精品免费 | 国色天香成人网 | 欧美午夜精品久久久久免费视 | 国产精品久久久av | 毛片视频免费播放 | 日本成人一区 | 在线视频一区二区 | 国产片在线观看.com | 欧美激情亚洲 | 九色91九色porny永久 | 国产精品毛片在线 | 亚洲综合国产 | 欧美性生活片 | 久久只有精品 | 久久精品一区二区三区四区 | 成人久久一区 | 黄色片免费在线观看 | 婷婷综合五月天 | 一区二区在线视频 | 国产三级在线 | 91视频在线 | 成人欧美一区二区三区视频xxx | 免费精品 | 国产精品色婷婷亚洲综合看 | 欧美日韩在线播放 | 在线看91 | 国产高清一区 | 日韩欧美不卡 | 国产一区二区三区在线免费 | 国产乱视频 | 久久午夜网站 | 欧美亚洲激情 | 麻豆国产免费 | 中文字幕在线观看一区二区三区 | www.天天操 | 欧洲一级毛片 | 国产色综合视频 | av电影免费在线观看 | 欧美激情视频一区二区三区在线播放 | 操操操av|