91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

單鏈表的頭插、尾插、刪除、合并等操作

發布時間:2020-08-09 08:17:03 來源:網絡 閱讀:1620 作者:巖梟 欄目:編程語言

單鏈表的頭插、尾插、刪除、合并等操作實現代碼如下:


#include<iostream>

using namespace std;


//單鏈表的存儲結構

typedef struct Node

{

int data;

struct Node* next;

}Node,*LinkList;//LinkList為結構指針類型


//初始化單鏈表

void InitList(LinkList *L)

{

*L = (LinkList)malloc(sizeof(Node));//建立頭結點

(*L)->next = NULL;//建立空的單鏈表L

}


//L是帶頭結點的空鏈表頭指針,通過鍵盤輸入表中元素值,利用頭插法建單鏈表L

void CreateFromHead(LinkList L)

{

Node *s;

char c;

int flag = 1;

while (flag)//flag初值為1,當輸入'$'時,置flag為0,建表結束

{

c = getchar();

if (c != '$')

{

s = (Node*)malloc(sizeof(Node));//建立新結點s

s->data = c;

s->next = L->next;//將s結點插入表頭

L->next = s;

}

else

{

flag = 0;

}

}

}


//L是帶頭結點的空鏈表頭指針,通過鍵盤輸入表中元素值,利用尾插法建單鏈表L

void CreateFromFail(LinkList L)

{

Node *r,*s;

r=L;//r指針動態指向鏈表的當前表尾,以便做尾插入,其初值指向頭結點

int flag = 1;

char c;

while (flag)//flag初值為1,當輸入'$'時,置flag為0,建表結束

{

c = getchar();

if (c != '$')

{

s = (Node*)malloc(sizeof(Node));//建立新結點s

s->data = c;

r->next = s;

r = s;

}

else

{

flag = 0;

r->next = NULL;//將最后一個結點的next鏈域置為空,表示鏈表結束 

}

}

}


//在帶頭結點的單鏈表L中查找第i個結點,若找到(1<=i<=n),則返回該結點的存儲位置,否則返回NULL

Node *Get(LinkList L, int i)

{

int j = 0;

Node *p;

if (i <= 0)

{

return NULL;

}

p = L;

while ((p->next != NULL) && (j < i))

{

p = p->next;//掃描下一結點

j++;//已掃描結點計數器

}

if (i == j)

{

return p;//找到了第i個結點

}

else

{

return NULL;

}

}


//在帶頭結點的單鏈表L中查找其結點值等于key的第1個結點,若找到則返回該結點的存儲位置p,否則返回NULL

Node *Locate(LinkList L, int key)

{

Node *p;

p = L->next;//從表中第一個結點開始

while (p!= NULL) //當前表未查完

{

if (p->data!=key)

{

p = p->next; 

}

else

{

break;//找到結點值等于key時退出循環

}

}

return p;

}


//求帶頭結點的單鏈表L的長度

int ListLength(LinkList L)

{

Node *p;

p = L->next;

int j = 0;//用來存放單鏈表的長度

while (p != NULL) 

{

p = p->next;

j++;

}

return j;//j為求得的單鏈表的長度

}


//在帶頭結點的單鏈表L中第i個位置插入值為e的新結點,n個元素有n+1個插入位置

#define OK 1

#define ERROR 0


void InsList(LinkList L, int i, int e)

{

Node *pre, *s;

int k = 0;

if (i<=0) //判斷插入位置是否合法

{

cout << "插入位置i值不合法!" << endl;

return (ERROR);

}

pre = L;

while (pre != NULL&&k < (i - 1))//表未查完且未查到第i-1個元素時重復,若找到pre指向第i-1個

{

pre = pre->next;

k = k + 1;

}

if (!pre)//若當前位置pre為空表,已找完還未找到第i個,說明插入位置不合理

{

cout << "插入位置不合理!" << endl;

return (ERROR);

}

s = (Node*)malloc(sizeof(Node));//申請一個新結點s

s->data = e;//值e置入s的數據域

s->next = pre->next;//修改指針,完成插入操作

pre->next = s;

return (OK);

}


//在帶頭結點的單鏈表L中刪除第i個元素,并將刪除的元素保存到變量*e中

void DelList(LinkList L, int i, int *e)

{

Node *pre, *r;

int k = 0;

pre = L;

while (pre->next != NULL&&k < (i - 1))//尋找被刪除結點i的前驅結點i-1,使p指向它

{

pre = pre->next;

k = k + 1;

}

//while循環是因為pre->next=NULL或i<1而跳出來的,因為pre->next=NULL,沒有找到合法的前驅位置,說明刪除位置i不合法

if (!(pre->next))

{

cout << "刪除結點的位置i不合理!" << endl;

return (ERROR);

}

r= pre->next; 

pre->next=r->next;//修改指針,刪除結點r

*e=r->data ;

free(r);//釋放被刪除結點所占的內存空間

return (OK);

}


//將遞增有序的單鏈表LA和LB,合并成一個遞增有序的單鏈表LC

LinkList MergeLinkList(LinkList LA, LinkList LB)

{

Node *pa, *pb,*r;

LinkList LC;//將Lc初始置為空表,pa和pb分別指向單鏈表LA和LB中的第一個結點,r初值為LC且r始終指向LC的表尾

pa = LA->next;

pb = LB->next;

LC = LA;

LC->next = NULL;

r = LC;

//當兩個表中均未處理完時,比較選擇將較小值結點插入到新表LC中

while ((pa != NULL) && (pb != NULL))

{

if (pa->data <= pb->data)

{

r->next= pa;

r = pa;//pa變成新的r結點

pa=pa->next;

}

else

{

r->next = pb;

r = pb;

pb = pb->next;

}

}

if (pa)//當表LA有剩余元素時,則將表LA的剩余元素鏈到新表LC表尾

{

r->next = pa;

}

else//否則將表LB的剩余元素鏈到新表LC表尾

{

r->next = pb;

}

free(LB);

return (LC);

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贡嘎县| 沁阳市| 固阳县| 天等县| 肥西县| 灌南县| 永寿县| 黔南| 湄潭县| 衡阳市| 岱山县| 怀宁县| 嘉善县| 弥勒县| 连江县| 赞皇县| 昌都县| 九江市| 安远县| 屯昌县| 龙岩市| 奉新县| 铜梁县| 徐闻县| 道孚县| 夹江县| 绥德县| 西昌市| 平阳县| 正定县| 观塘区| 遵义市| 潜江市| 扬州市| 房产| 西畴县| 潮州市| 鸡西市| 基隆市| 沙坪坝区| 江都市|