欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C語(yǔ)言實(shí)現雙向鏈表
2015
本文給大家分享的是一段使用C語(yǔ)言實(shí)現雙向鏈表的代碼,完全是根據自己的理解和認識來(lái)編寫(xiě)的,希望大家能夠喜歡,文章的最后附上了一個(gè)網(wǎng)友寫(xiě)的對于雙向鏈表刪除節點(diǎn)、插入節點(diǎn)、雙向輸出等操作的代碼,也非常不錯,推薦給大家

這個(gè)小代碼是我憑自己對指針和鏈表的理解和認識,自己實(shí)現的,沒(méi)有參考其他人的代碼,如果有相同的地方,那真的只是巧合,代碼我在ubuntu 15.04下測試通過(guò),可能存在很多錯誤和漏洞.

doublelist.c

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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
/*************************************************************************
  > File Name: doublelist.c
  > Author: ChenYiLiang
  > Mail: chenyiliangex@163.com
  > Created Time: Sat 21 Mar 2015 07:32:22 PM CST
 ************************************************************************/
  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
struct userdata{
  int userid;
  char username[30];
  
  struct userdata *previous;
  struct userdata *next;
};
  
  
  
struct userdata *header;
size_t scanf_id;
char scanf_name[30];
  
int yesno;
int deletePosition;
int alterPosition;
int alterId;
char alterName[30];
  
int searchPosition;
  
FILE *ptr_fpid;
  
/*向鏈表中插入數據*/
int insert_list(struct userdata *header, size_t position, char name[], size_t id);
/*刪除鏈表中指定的節點(diǎn)*/
int delete_node(struct userdata *header, size_t position);
/*修改指定位置的節點(diǎn)信息*/
int alter_node(struct userdata *header, size_t position, size_t id, char name[]);
/*查找鏈表中的數據*/
struct userdata *search_node(struct userdata *header, size_t position);
/*遍歷鏈表*/
int travel_list(struct userdata *header);
/*判斷鏈表是空*/
int isempty(struct userdata *header);
  
/*將鏈表結構寫(xiě)入文件*/
int write_into_file(struct userdata *header, FILE *fp);
/*從文件讀取數據放到鏈表中*/
int read_from_file(struct userdata *header, FILE *fp);
  
int main(){
  struct userdata *header_node = (struct userdata *)malloc(sizeof(struct userdata));
  header_node -> previous = NULL;
  header_node -> next = NULL;
  
  read_from_file(header_node, ptr_fpid);
  travel_list(header_node);
  while(1){
  //scanf("%*[^\n]");
  //scanf("%*c");
  //scanf("%*[^\n]");
  printf("please input id - ");
  scanf("%d", &scanf_id);
  //scanf("%*c");
  //scanf("%*[^\n]");
  printf("please input your name - ");
  scanf("%s", scanf_name);
  
  printf("%d - %s\n\n", scanf_id, scanf_name);
  
  //isempty(header_node);
  
  /*0表示默認插入到鏈表的尾部*/
  insert_list(header_node, 0, scanf_name, scanf_id);
    
  //write_into_file(header_node, ptr_fpid);
  //isempty(header_node);
  
  
    printf("input anymore - ");
    scanf("%d", &yesno);
    if(yesno == -1){
      break;
    }
  
  scanf("%*c");
  scanf("%*[^\n]");
// travel_list(header_node);
  
  }
  getchar();
  //printf("delete position data - ");
  //scanf("%d", &deletePosition);
  //delete_node(header_node, deletePosition);
  
// printf("alter data for position - ");
// scanf("%d", &alterPosition);
// printf("please inout new id - ");
// scanf("%d",&alterId);
// printf("please input new name - ");
// scanf("%s", alterName);
// alter_node(header_node, alterPosition, alterId, alterName);
  write_into_file(header_node, ptr_fpid);
  travel_list(header_node);
  printf("\n\n");
  printf("please input position to search - ");
  scanf("%d", &searchPosition);
  struct userdata *searchData = search_node(header_node, searchPosition);
  printf("%d\n", searchData -> userid);
  printf("%s\n", searchData -> username);
  return 0;
}
  
/* 插入節點(diǎn) */
int insert_list(struct userdata *header, size_t position, char name[], size_t id ){
  struct userdata *temp_newuser = header;
  struct userdata *getMemory = (struct userdata *)malloc(sizeof(struct userdata));
  
  getMemory -> userid = id;
  strncpy(getMemory -> username, name, 30);
  /*當position == 0時(shí),表示默認插入到鏈表的尾部*/
  if(0 == position){
    if(NULL != temp_newuser -> next){
      while(NULL != temp_newuser -> next){
        temp_newuser = temp_newuser -> next;
      }
    }
  }
  
  /*當position > 1時(shí)則尋找合適的位置插入*/
  if(1 <= position){
    for(int i = 0; i <= position; i++){
      /*當執行此處的代碼時(shí)表示,鏈表已經(jīng)到達尾部或者是空鏈表*/
      if(NULL == temp_newuser -> next){
        break;
      }
      temp_newuser = temp_newuser -> next;
    }
  }
  
  getMemory -> previous = temp_newuser;
  if(temp_newuser -> next == NULL){
    temp_newuser -> next = getMemory;
    getMemory -> next = NULL;
  }else{
    temp_newuser -> next -> previous = getMemory;
    getMemory -> next = temp_newuser -> next;
    temp_newuser -> next = getMemory;
  }
  
  return 0;
}
  
/*刪除鏈表中指定的節點(diǎn)*/
int delete_node(struct userdata *header, size_t position){
  int is_empty = isempty(header);
  if(0 == is_empty){
    printf("this si a empty list!\n\n");
    return -1;
  }
  
  struct userdata *deleteNode = header;
  
    for(int i = 0; i < position; i++ ){
      /*當執行此處的代碼時(shí)表示,鏈表已經(jīng)到達尾部或者是空鏈表*/
      if(NULL == deleteNode -> next){
        break;
      }
      deleteNode = deleteNode -> next;
    }
  
  /**/
  deleteNode -> next -> previous = deleteNode -> previous;
  deleteNode -> previous -> next = deleteNode -> next;
  free(deleteNode);
  
  return 0; 
}
  
/*修改指定位置的節點(diǎn)信息*/
int alter_node(struct userdata *header, size_t position, size_t id, char name[]){
  int isEmpty = isempty(header);
  if(0 == isEmpty){
    printf("this is a empty list\n\n");
    return -1;
  }
    
  struct userdata *alterNode = header;
    for(int i = 0; i < position; i++ ){
      /*當執行此處的代碼時(shí)表示,鏈表已經(jīng)到達尾部或者是空鏈表*/
      if(NULL == alterNode -> next){
        break;
      }
      alterNode = alterNode -> next;
    }
  
    alterNode -> userid = id;
    strncpy(alterNode -> username, name, 30);
  
  return 0;
}
  
/*查找鏈表中的數據*/
struct userdata *search_node(struct userdata *header, size_t position){
  int isEmpty = isempty(header);
  if(0 == isEmpty){
    printf("this is a empty!\n");
    return NULL;
  }
  
  struct userdata *searchNode = header;
  for(int i = 0; i < position; i++){
    if(NULL == searchNode -> next){
      break;
    }
    searchNode = searchNode -> next;
  }
  
  return searchNode;
}
  
/*遍歷鏈表*/
int travel_list(struct userdata *header){
  struct userdata *travel = header;
  if(NULL == travel -> next){
    printf("This is a empty list!!\n");
    return 1;
  }
    
  for(travel = travel -> next ; ; travel = travel -> next){
    printf("%d\n",travel -> userid);
    printf("%s\n", travel -> username);
    if(NULL == travel -> next){
      break;
    }
  
  
  return 1;
}
  
/*判斷鏈表是空*/
int isempty(struct userdata *header){
  if(header -> next == NULL){
    return 0;
  }else{
    return 1;
  }
}
  
/*將鏈表結構寫(xiě)入文件*/
int write_into_file(struct userdata *header, FILE *fp){
  fp = fopen("listdata", "wb");
  if(NULL == fp){
    perror("open file failed when write into file!"),exit(-1);
  }
  
  printf("come into write!\n");
  for(struct userdata *move = header -> next; ; move = move -> next){
    fwrite(move,sizeof(struct userdata), 1, fp);
    if(NULL == move -> next){
      break;
    }
  }
  fclose(fp);
  fp = NULL;
  return 0;
}
/*從文件讀取數據放到鏈表中*/
int read_from_file(struct userdata *header, FILE *fp){
  struct userdata *readfile = header;
  fp = fopen("listdata", "rb");
  if(NULL == fp){
    perror("open file failed when read - ");
    return -1;
  }
  
  while(1){
    struct userdata *newread = (struct userdata *)malloc(sizeof(struct userdata));
    fread(newread, sizeof(struct userdata), 1, fp);
    if(feof(fp)){/*當讀取到文件的尾部時(shí).跳出循環(huán)*/
      break;
    }
    readfile -> next = newread;
    newread -> next = NULL;
    newread -> previous = readfile;
    readfile = newread;
  }
  fclose(fp);
  fp = NULL;
  return 0;
}

C語(yǔ)言實(shí)現雙向鏈表刪除節點(diǎn)、插入節點(diǎn)、雙向輸出等操作

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
#include<cstdio> 
#include<cstdlib> 
typedef struct DoubleLinkedList
{
  int data;
  struct DoubleLinkedList *pre;
  struct DoubleLinkedList *next;
}DlinkedList_Node;
//建立鏈表 
DlinkedList_Node* createDLink()
{
  DlinkedList_Node *head,*p,*s;
  int x;
  head = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
  p = head;
  while(1)
  {
    printf("please input the data: \n");
    scanf("%d",&x);
    if(x != 65535)
    {
      s = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
      s ->data = x;
      s-> pre = p;
      p->next = s;
      p=s;
    }
    else
      {
        printf("\n數據輸入結束\n");
        break;
      }
  }
  p->next = NULL;
  head = head ->next;
  head->pre = NULL;
  return head;
}
//順序、反序打印鏈表 
void printDLink(DlinkedList_Node *head)
{
  DlinkedList_Node *p,*s;
  p = head;
  printf("正序輸出雙向鏈表:\n");
  while(p)
  {
    printf("%d ",p->data);
    s = p;
    p = p->next;
  }
  printf("\n 逆序輸出雙向鏈表: \n");
  while(s)
  {
    printf("%d ",s->data);
    s = s->pre;
  }
  printf("\n \n");
}
//刪除一個(gè)結點(diǎn) 
DlinkedList_Node* deleteDlinkedList_Node(DlinkedList_Node *head,int i)
{
  DlinkedList_Node *p;
  p = head;
  if(p->data == i)
  {
    head = p->next;
    head->pre = NULL;
    free(p);
    return head;
  }
  while(p)
  {
    if(p->data == i)
    {
    p->pre->next = p->next;
    p->next->pre = p->pre;
    free(p);
    return head;
    }
    p = p->next;
  }
  printf("沒(méi)有找到想要刪除的數據\n");
  return head;
}
//插入一個(gè)結點(diǎn) 
DlinkedList_Node* insertDlinkedList_Node(DlinkedList_Node *head,int i)
{
  DlinkedList_Node *p,*temp;
  p = head;
  temp = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));
  temp ->data = i;
  if(i < p->data)//比頭結點(diǎn)數據小,插入到鏈表頭部 
  {
    head = temp;
    head->next = p;//此處p為原來(lái)的head 
    head->pre = NULL;
    p->pre = head;//此處p為原來(lái)的head 
    return head;
  }
  while(p != NULL && i > p->data)//尋找合適的插入位置 
  {
    p = p->next;
  }
  if(i < p->data)//在鏈表中間某處找到合適插入位置 
  {
    temp ->next = p;
    temp ->pre = p->pre;
    p ->pre->next = temp;
    p ->pre = temp;
    return head;
  }
  else//沒(méi)有找到合適的位置,只有將數據插入到鏈表尾部 
  {
    p->next = temp; //遍歷到鏈表尾部,p==NULL 
    temp ->pre = p;
    temp ->next = NULL;
    return head;
  }
}
int main()
{
  DlinkedList_Node *head;
  head = createDLink();
  printDLink(head);
  head = insertDlinkedList_Node(head,1012);
  head = deleteDlinkedList_Node(head,1991);
  printDLink(head);
}
/*****************************
運行結果如下:
please input the data:
1991
please input the data:
1992
please input the data:
2013
please input the data:
2014
please input the data:
512
please input the data:
420
please input the data:
65535
  
數據輸入結束
正序輸出雙向鏈表:
1991 1992 2013 2014 512 420
 逆序輸出雙向鏈表:
420 512 2014 2013 1992 1991
  
正序輸出雙向鏈表:
1012 1992 2013 2014 512 420
 逆序輸出雙向鏈表:
420 512 2014 2013 1992 1012
  
******************************/

以上就是本文給大家分享的全部?jì)热萘?,希望對大家更加熟悉C語(yǔ)言雙向鏈表能夠有所幫助。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
經(jīng)典程序100例(71-80)
單向鏈表、雙向鏈表,棧,隊列的C語(yǔ)言的實(shí)現方法
在ubuntu下用C語(yǔ)言編寫(xiě)一個(gè)學(xué)生管理系統,編譯時(shí)出錯,緊急求救?。?!
Linked list
C語(yǔ)言之結構體就這樣被攻克了!
060.記錄個(gè)人資料
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久