HBU DS 1-3 遞增的整數序列連結串列的插入 (20分)
HBU DS 1-3 遞增的整數序列連結串列的插入 (20分)
本題要求實現一個函式,在遞增的整數序列連結串列(帶頭結點)中插入一個新整數,並保持該序列的有序性。
函式介面定義:
List Insert( List L, ElementType X );
其中List
結構定義如下:
typedef struct Node *PtrToNode;
struct Node {
ElementType Data; /* 儲存結點資料 */
PtrToNode Next; /* 指向下一個結點的指標 */
};
typedef PtrToNode List; /* 定義單連結串列型別 */
L
是給定的帶頭結點的單連結串列,其結點儲存的資料是遞增有序的;函式Insert
要將X
插入L
,並保持該序列的有序性,返回插入後的連結串列頭指標。
裁判測試程式樣例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 細節在此不表 */
void Print( List L ); /* 細節在此不表 */
List Insert( List L, ElementType X );
int main()
{
List L;
ElementType X;
L = Read();
scanf("%d", &X);
L = Insert(L, X);
Print(L);
return 0;
}
/* 你的程式碼將被嵌在這裡 */
輸入樣例:
5
1 2 4 5 6
3
輸出樣例:
1 2 3 4 5 6
剛開始寫這個寫的很麻煩,又是段錯誤啥的,還分了x是不是裡面元素的情況,其實發現不用管這個。然後看了大佬的程式碼,發現原來還可以不用pre指標(剛開始寫的是根據c語言書上例題,因為寫這個的時候,就沒有怎麼寫過連結串列)。
temp可以理解為前一個指標,然後迴圈條件是temp->next(下一個節點) 以及下一個節點的data,出了迴圈,要麼就是temp是指向連結串列的表位,要麼是temp的下一個資料>=X,要把X插入temp和下一個資料之間。下面第一份程式碼就是我剛開始寫的,也AC了我記得。然後過了一個多星期,我又重寫了一遍,於是有了程式碼2。
程式碼1:
List Insert(List L, ElementType X)
{
List currNode = (List)malloc(sizeof(struct Node));
currNode->Data = X;
currNode->Next = NULL;
if (L->Next == NULL)
{
L->Next = currNode;
return L;
}
List temp = L;
while (temp->Next && temp->Next->Data < X) //下個表存在&&下個表的資料小於x
{
temp = temp->Next;
}
//一種情況是temp->最後一個,或者下個表的資料>=X
if (temp->Next)
{
currNode->Next = temp->Next;
temp->Next = currNode;
}
else
{
temp->Next = currNode;
}
return L;
}
程式碼2:
List Insert(List L, ElementType X)
{
List temp = L, s = (List)malloc(sizeof( struct Node));
while (temp->Next && temp->Next->Data < X)
temp = temp->Next;
s->Data = X;
s->Next = temp->Next;
temp->Next = s;
return L;
}
相關文章
- 遞增的整數序列連結串列的插入
- 習題2.4 遞增的整數序列連結串列的插入 (15分) 浙江大學資料結構資料結構
- 資料結構—-連結串列的增和插入(2018/10/23)資料結構
- 連結串列入門與插入連結串列
- 連結串列-插入排序排序
- 單連結串列的排序(插入,選擇,冒泡)排序
- 兩個有序連結串列序列的交集
- 單連結串列逆位表示的 2 個整數求和
- 連結串列基礎2(超簡單)--單連結串列的插入和刪除
- 連結串列與遞迴遞迴
- 結點插入到單連結串列中
- DS單連結串列--類實現(未完成)
- 1290. 二進位制連結串列轉整數
- 雙向連結串列 尾節點插入
- 7-23 jmu-ds-單連結串列的基本運算 (15 分)
- 雙向連結串列————查詢、刪除、插入結點
- 資料結構:單迴圈連結串列的建立插入與刪除資料結構
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- python資料結構——連結串列(無序列表)Python資料結構
- 反轉連結串列(遞迴與棧)遞迴
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- 用遞迴的方法將單連結串列逆向輸出遞迴
- 147. 對連結串列進行插入排序排序
- C語言單向連結串列的增刪操作C語言
- 連結串列的ADT
- Golang從合併連結串列聊遞迴Golang遞迴
- 資料結構_連結串列_單向迴圈連結串列 & 雙向連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 反轉連結串列、合併連結串列、樹的子結構
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 單向迴圈連結串列——查詢、刪除、插入結點
- 雙向迴圈連結串列————遍歷、查詢、插入結點
- day3 連結串列-增刪查
- LeetCode-147-對連結串列進行插入排序LeetCode排序
- 為什麼陣列查詢比連結串列要快?而插入刪除比連結串列效率低陣列
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- 連結串列 - 單向連結串列
- 資料結構__連結串列_單連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言