當前位置:首頁 » 編程語言 » 鏈表反轉c語言

鏈表反轉c語言

發布時間: 2025-08-10 22:43:40

① 用C語言編一個程序:兩個遞增有序鏈表合並成一個遞減鏈表,

#include<stdio.h>
#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
}node,*list;
void init(list &head)
{
head=(list)malloc(sizeof(node));
head->next=NULL;
}

void input(list &h)
{
list p,q;
q=h;
printf("輸入數據的個數 n : ");
int n;
scanf("%d",&n);
printf("請輸入 %d 個有序遞增數據:\n",n);
for (int i=0;i<n;i++)
{
// printf("第 %d 個: ",i+1);
p=(list)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
}
}

void output(list h)
{
list p;
p=h->next;
printf("輸出數據\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

void combine(list &a,list &b,list &c)
{
list p,q,t;
p=a->next;
q=b->next;
free(b);
b=q;
c=a;
a=p;
c->next=NULL;
while(p&&q)
{
if (p->data<=q->data)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
else
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}
if (p!=NULL)
{
while(p)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
}
if (q!=NULL)
{
while(q)
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}

}
void main()
{
list a,b,c;
init(a);init(b);
printf("\n輸入鏈表A :\n");
input(a);
printf("\n輸入鏈表B :\n");
input(b);

printf("輸出合並後的鏈表:\n");
combine(a,b,c);
output(c);
}
結果:
輸入鏈表A :
輸入數據的個數 n : 3
請輸入 3 個有序遞增數據:
4 5 9

輸入鏈表B :
輸入數據的個數 n : 4
請輸入 4 個有序遞增數據:
2 3 7 10

輸出合並後的鏈表:
輸出數據
10 9 7 5 4 3 2
Press any key to continue

② C語言必背100代碼,C語言必會100代碼大全

對於C語言初學者而言,掌握基礎的關鍵代碼至關重要。本文匯總了100個C語言必備代碼示例,旨在幫助你快速上手和理解編程邏輯。以下是部分內容概要:



  • 1. 簡單輸出:通過C語言編寫九九乘法表,理解循環和條件語句的應用。

  • 2. 數組處理:實現4x4數組的逆時針旋轉,鍛煉數組操作和邏輯思維。

  • 3. 數學問題:用C解決兔子繁殖問題,探索遞歸和數列的概念。

  • 4. 素數檢測:編寫程序判斷並輸出101-200之間的素數,學習基本演算法設計。

  • 5. 完數查找:編寫代碼找出1000以內的完數,理解因子和數學規律。

  • 6. 三角形列印:列印直角楊輝三角,練習控制台輸出和圖形表示。

  • 7. 平均成績計算:輸入成績計算學生和課程的平均值,涉及輸入處理和數組操作。

  • 8. 反向字元串:實現字元串反轉,練習指針和字元操作。

  • 9-11. 排序演算法:包含從大到小和從小到大排序,掌握基本排序方法。

  • 12. 字元串替換:編寫函數實現字元串替換,了解字元串處理函數。

  • 13. 查找子串:理解字元串搜索演算法,用C語言查找指定子串。

  • 14-15. 結構體和鏈表:使用指針操作結構體數組和創建簡單鏈表,接觸數據結構。

  • 16. 冒泡排序:實現冒泡排序,鍛煉代碼優化和演算法實現。

  • 17. 迴文判斷:輸入字元串並檢查是否為迴文,練習字元串比較。

  • 18. 函數編寫:計算π的近似值,學習函數設計和精度控制。


這些代碼涵蓋了C語言的基礎操作,通過不斷實踐和理解,你將逐漸熟悉和掌握C語言的核心概念。

③ C語言反轉鏈表的遞歸演算法

/*在你遞歸之後的p一定要p->next=NULL;就可以了整個修改後的程序如下:(vs2005下運行正常)*/
#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
#include<conio.h>

typedef struct link
{ int data;
struct link *next;
}node;

node *createList()
{
node *pre, *cur, *head;
int temp;
head = (node *)malloc(sizeof(node));
if(head == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
head->data = 0;
head->next = NULL; /*這樣負值效率較低,絕大部分都在做無用功,
只要在這個for循環後把最後一個賦予NULL就可以了*/
pre = head;
printf("Input data:");
scanf("%d", &temp);
while(temp!=0)
{
cur = (node *)malloc(sizeof(node));
if(cur == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
cur->data = temp;
cur->next = NULL;
pre->next = cur;
pre = cur;
printf("Input data:");
scanf("%d", &temp);
}
return head;
}
void printList(node **head)/*實際上形參為 node * head就可以了,不知道你為啥這么寫,沒必要*/
{
node *temp;
temp = (*head)->next;
if(head == NULL)
return;
while(temp)
{
printf("\t%d", temp->data);
temp = temp->next;
}
printf("\nOutput complete!\n");
}
node *reverseRecursive(node *p, node *head)
{
node *temp ;
if(p->next == NULL)
{
head->next = p;
return p;
}
temp= reverseRecursive(p->next, head);
temp->next = p;
p->next=NULL;/*這里要個p的指針域賦予NULL*/
return p;
}
int main()
{
node *head = NULL;
head = createList();
printList(&head);
/*ReverseLink(head);*/
reverseRecursive(head->next, head);
printList(&head);
getch();
return 0;
}

④ 史上最全單鏈表的增刪改查反轉等操作匯總以及5種排序演算法(C語言)

史上最全單鏈表的增刪改查反轉等操作匯總以及5種排序演算法

一、單鏈表的基本操作

  1. 創建鏈表

    • 通過特定函數創建鏈表,並初始化頭節點和尾節點。
  2. 列印鏈表

    • 使用循環遍歷鏈表,列印每個節點的值。
  3. 插入元素

    • 頭部插入:在鏈表頭部插入新節點。
    • 中間插入:在鏈表的指定位置插入新節點。
    • 尾部插入:在鏈表尾部插入新節點。
  4. 刪除元素

    • 根據節點值或位置刪除鏈表中的節點,需考慮頭尾節點的特殊情況。
  5. 查找元素

    • 根據值在鏈表中進行查找,返回節點的位置或指針。
  6. 修改元素

    • 根據位置修改鏈表中指定位置元素的值。
  7. 鏈表長度

    • 計算鏈表的長度。
  8. 節點查找

    • 查找指定位置的前驅節點和後繼節點。

二、鏈表反轉

  • 調整鏈表結構,使鏈表元素逆序排列。

三、判斷鏈表是否有環

  • 通過演算法檢測鏈表中是否存在環狀結構。

四、排序演算法

  1. 冒泡排序

    • 重復遍歷鏈表,比較相鄰節點並交換值,直到鏈表有序。
  2. 選擇排序

    • 每次從未排序部分選擇最小的節點,將其放到已排序部分的末尾。
  3. 插入排序

    • 構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。
  4. 歸並排序

    • 將鏈表分成兩半,遞歸地對每半部分進行排序,然後將兩個有序鏈表合並成一個。
  5. 快速排序

    • 選擇一個基準節點,將鏈表分成兩部分,小於基準的節點放在基準前面,大於基準的節點放在基準的後面,然後遞歸地對這兩部分排序。

以上內容涵蓋了單鏈表的基本操作以及五種常見的排序演算法,這些演算法在C語言中都有相應的實現方式。如需具體代碼實現,可參考相關數據結構教程或源碼庫。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:711
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:973
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:684
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:836
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:742
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1084
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:313
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:193
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:881
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:839