當前位置:首頁 » 編程語言 » c語言節點倒置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言節點倒置

發布時間: 2022-12-12 04:10:10

c語言如何實現數組元素倒置

1、打開c語言編輯器,新建一個空白的文件:

⑵ C語言單鏈表節點倒置的演算法問題

扣著的是頭節點(頭子)

車是首節點(首子)

馬是次節點(次子)

牙簽細的是指針指向,香頭發黑的是指向,鐵頭細的是指向。

根據步驟寫程序的偽演算法(3步4循環,7張圖片搞定),如下:


第一個循環把馬弄到車前面,

第二個循環把相弄到馬前面

第三個循環把士弄到相前面

........

直到香指向為空後停止循環。

代碼如下:只需要一個首結點pHead,就能把鏈表找到,並倒置。具體代碼如下

p香=pHead->pNext;

p鐵=p香->pNext;

p香->pNext=NULL;

P香=p鐵

while(p香 !=NULL)

{

p鐵=p香->pNext;

p香->pNext=pHead->pNext;

pHead->pNext=p香;

p香=p鐵;

}


對照偽演算法(三步四循環),和上面的代碼是一一對應的:

第一步:香頭指向首子,鐵頭指向次子

第二步:刪掉首子指向次子(鐵頭所指向的那個子)的牙簽

第三步:香頭跟著鐵頭

以下循環條件:(條件:香頭指向不為空)

{

循環1:鐵頭移動到香頭的下一個指向

循環2:香頭的下一個指向首子

循環3:頭子的下一個跟著香頭

循環4:香頭跟著鐵頭

}

自己用道具操作幾遍,然後把流程背會,以後自己根據流程寫代碼即可。

⑶ C語言新手編程問題 鏈表的倒置

用於緩沖掉為num賦值後的回車符,否者在之後的Create函數調用時會直接break出while循環

可用fflush(stdin);替代

⑷ C語言遞歸演算法倒置鏈表 出錯 求高手解答 給點意見

倒置鏈表么?哥們你考研呢吧,
應該是這樣的:
最慢的最2 的就是 數長度,付給一個數組,數據交換,重新建立個鏈表。

一般演算法最腦殘的就是 用棧,先把所有節點進棧,然後出棧,先出來的指向後出來的 ,這個變個花樣就是遞歸了

常規想法是下面這樣:
鏈表分成有頭結點的鏈表和無頭結點的鏈表兩種
不管怎樣,將要轉置的鏈表處理成只含第一節點的帶頭結點的鏈表l1 以及 一個無頭節點的包含該鏈表剩餘節點的鏈表l2。然後,按照順序將l2上的節點依次取下,插入到L1的頭結點和其第一個節點之間,即將從L2取下的節點作為第一個節點插入到L1中;

下面是參考代碼:
typedef char DataType;

typedef struct node{
DataType data;
struct node *next;
}ListNode;

typedef ListNode* LinkList;

ListNode *p;
LinkList head;
LinkList ReverseList(LinkList head)
{
ListNode *p,*q;//設置兩個臨時指針變數
if(head->next&&head->next->next)
{//當鏈表不是空表或者單節點時
p=head->next;
q=p->next;
p->next=null;//將開始節點變為終端節點
while(q)
{
p=q;
q=q->next;
p->next=head->next;
head->next=p;
}
return (head);

}
return (head);
}

大概情況就是這樣了,為了點分不容易啊
遞歸的話就是
鏈表 轉置函數(鏈表 b)
{鏈表 temp;
節點 node;
if(b->next)
temp=b->next;
node=b;
temp=轉置函數(temp);
temp->next=b;
return b;//代碼好久不寫差不多忘光了大概就是 將第一個節點取下,轉置剩餘鏈表,再把最後一個節點放在轉置鏈表最後
}

⑸ c語言,鏈表的反轉怎麼寫代碼

單鏈表反轉很簡單,只說下思路:
1,從頭到尾循環遍歷鏈表
2,取下頭結點,作為尾結點,尾結點此時也為頭結點
3,採用前插法,將步驟二中取下的結點一個一個連接到頭結點前面,成為新的頭結點。
4,鏈表全部遍歷完後,新的鏈表產生了,是原來鏈表的反轉。

⑹ 用c語言實現數組倒置

#include <stdio.h>
void invert(int x[],int n);
void main()
{
int i,*p,a[10]={2,3,4,5,6,7,8,9,10,11};
printf("%s\n","元素倒置前:");
for(p=a;p<a+10;) printf("%d ",*(p)++);
printf("\n");
p=a;
invert(p,10);
printf("%s\n","元素倒置後:");
for(p=a;p<a+10;) printf("%d ",*(p)++);
printf("\n");
}
void invert(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for (i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
}