久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
鏈表的數據域和指針域的問題
[打印本頁]
作者:
1314love
時間:
2022-8-9 17:39
標題:
鏈表的數據域和指針域的問題
請問各位,就是一個鏈表,我交換了兩個節點的數據域和指針域,它輸出的時候會按交換后的來輸出嗎
就比方 head->2->4->3
交換后 head->4->2->3
他最終會按交換后的輸出嗎?
如果可以的話,為什么會按交換后的輸出,他不是在交換前就指向了下一個的地址嗎?如果交換了指針域,他這個地址不就亂了嗎,也就是鏈表不就亂了。求大神解答。
作者:
Hephaestus
時間:
2022-8-9 23:15
既然是交換,那么輸出為什么不會交換?說了這么多,我覺得你還是對交換操作沒有自信,把有疑慮的代碼貼出來才是正道。
作者:
1314love
時間:
2022-8-10 08:19
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定義一個學生結構體
typedef struct Stu
{
int id;
int score;
struct Stu *pnext;
}Stu;
//創建一個鏈表
Stu *create_Stu(int n)
{
//先定義一個頭結點,不存放有效數據
Stu *head = (Stu*)malloc(sizeof(Stu));
if (head == NULL)
return NULL;
head->id = -1;
head->score = -1;
head->pnext = NULL;
//輸入要加入的n個結點的信息,新的結點加到鏈表最后
Stu *tmp = head;
int i;
for (i = 0; i < n; i++)
{
Stu *new_node = (Stu*)malloc(sizeof(Stu));
if (new_node == NULL)
return NULL;
scanf("%d", &new_node->id);
scanf("%d", &new_node->score);
new_node->pnext = NULL;
//新節點加到鏈表最后
tmp->pnext = new_node;
tmp = new_node;
}
return head;
}
//將一個鏈表與另一個鏈表合并,返回第一個鏈表頭部
Stu *merge_Stu(Stu *students1, Stu *students2)
{
if (students1 == NULL || students2 == NULL)
return NULL;
//先找到第一個鏈表的尾結點
Stu *tmp1 = students1;
while (tmp1->pnext != NULL)
{
tmp1 = tmp1->pnext;
}
//出來之后tmp1就為第一個鏈表的尾結點
Stu *tmp2 = students2;
//第一個鏈表的尾結點連接第二個鏈表的首結點
tmp1->pnext = tmp2->pnext;
//不要忘記釋放第二個鏈表的頭結點
free(tmp2);
//返回合并之后的頭結點
return students1;
}
//鏈表結點排序重組
void sort_Stu(Stu *students)
{
if (students == NULL)
return;
Stu *pre = NULL;
Stu *cur = NULL;
Stu tmp;
//選擇法對結點進行排序
for (pre = students->pnext; pre->pnext != NULL; pre = pre->pnext)
{
for (cur = pre->pnext; cur != NULL; cur = cur->pnext)
{
if (pre->id > cur->id)
{
//數據域和指針域都要進行交換
//數據域交換
tmp = *pre;
*pre = *cur;
*cur = tmp;
//指針域交換
tmp.pnext = pre->pnext;
pre->pnext = cur->pnext;
cur->pnext = tmp.pnext;
}
}
}
}
//打印鏈表信息
void print_Stu(Stu *students)
{
if (students == NULL || students->pnext == NULL)
{
printf("invalid list!\n");
return;
}
Stu *cur = students->pnext; //指向首結點
while (cur != NULL)
{
printf("%d %d\n", cur->id, cur->score);
cur = cur->pnext;
}
}
//釋放整個鏈表
void destory_Stu(Stu *students)
{
if (students == NULL)
return;
Stu *s = students;
Stu *tmp = NULL; //用來保存當前所釋放的結點的下一個結點
while (s != NULL)
{
tmp = s->pnext;
free(s);
s = tmp;
}
}
int main()
{
int N, M;
scanf("%d %d", &N, &M);
//創建兩個鏈表
Stu *students1 = create_Stu(N);
Stu *students2 = create_Stu(M);
//合并兩個鏈表
Stu *students = merge_Stu(students1, students2);
//對新鏈表中的內容按學號升序排列并打印
sort_Stu(students);
print_Stu(students);
destory_Stu(students);
return 0;
}
//數據域和指針域都要進行交換
//數據域交換
tmp = *pre;
*pre = *cur;
*cur = tmp;
//指針域交換
tmp.pnext = pre->pnext;
pre->pnext = cur->pnext;
cur->pnext = tmp.pnext;
就是上面這個指針域和數據域交換了
作者:
天ノ憶
時間:
2022-8-10 10:05
你這種寫法交換的是節點指向的值,而地址是不變的,最后這6行代碼這么寫是沒問題的,其他的太長不看
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲美女网站
|
999精品视频在线观看
|
国产在线视频在线观看
|
国产69精品久久久久777
|
久久久久黄
|
久久婷婷麻豆国产91天堂
|
a级片网站
|
国产精品日日夜夜
|
色婷婷综合久久久中文字幕
|
欧美日韩国产免费
|
成年人精品视频在线观看
|
欧美日韩一区不卡
|
精品一区二区电影
|
亚洲一区二区三区免费在线
|
国产一区二区三区视频在线观看
|
亚洲第一天堂无码专区
|
欧美区日韩区
|
在线观看av网站永久
|
国产jizz女人多喷水99
|
亚洲免费在线观看
|
国产成人免费观看
|
一区二区三区四区不卡
|
日本精品视频一区二区
|
逼逼视频
|
在线亚洲一区二区
|
丁香综合
|
国产精品中文字幕在线播放
|
国产精久久久久久
|
久草网址
|
亚洲精品久久久久久一区二区
|
日日夜夜免费精品视频
|
中文字幕专区
|
激情久久网
|
日本不卡高清视频
|
国产精品久久久久久久久婷婷
|
国产福利网站
|
精品乱码一区二区
|
在线免费av电影
|
www.久久久久久久久久久久
|
男女国产视频
|
国产区视频在线观看
|