下载麻将游戏免费|手机麻将游戏

c語言——鏈表的基本操作

飛來科技  發布時間:2019-08-22 15:05:51

本文關鍵詞:c語言雙向鏈表的基本操作

c語言雙向鏈表的基本操作_鏈表 c語言_約瑟夫環 c語言 鏈表

本文鏈接:

#include <stdio.h>

typedef int ElementType;

typedef struct ListNode{

int k;

ElementType element;

struct ListNode *m_pNext;

}ListNode,*PNODE;

//在k處插入元素

ListNode *FindKthToTail(ListNode *pListHead, unsigned int k)

{

if (pListHead == NULL)

{

return NULL;

}

ListNode *pAhead = pListHead;

ListNode *pBehind = NULL;

for (int i = 0; i < k - 1; i++)

{

pAhead = pAhead->m_pNext;

}

pBehind = pListHead;

while (pAhead->m_pNext != NULL)

{

pAhead = pAhead->m_pNext;

pBehind = pBehind->m_pNext;

}

return pBehind;

}

//創建鏈表

PNODE CreateList(int lens)

{

int data;

PNODE pHead = (PNODE)malloc(sizeof(ListNode));

if (pHead == NULL)

{

printf("分配空間失敗請重新分配\n");

exit(-1);

約瑟夫環 c語言 鏈表_c語言雙向鏈表的基本操作_鏈表 c語言

}

PNODE pTail = pHead;

pTail->m_pNext = NULL;

printf("開始分配數組個數\n");

for (int i = 0; i < lens; i++)

{

PNODE pNew = (PNODE)malloc(sizeof(ListNode));

if (pNew == NULL)

{

printf("空間分配失敗\n");

exit(-1);

}

printf("請鍵入第%d個數據", i + 1);

scanf_s("%d", &data);

pNew->element = data;

pTail->m_pNext = pNew;

pNew->m_pNext=NULL;

pTail = pTail->m_pNext;

}

printf("創建數組成功\n");

return pHead;

};

//將兩個鏈表連接在一起

PNODE ADDList(ListNode *head1, ListNode *head2)

{

ListNode *pr;

pr = head1;

while(pr->m_pNext!=NULL)

{

pr = pr->m_pNext;

}

pr->m_pNext= head2->m_pNext;

/*head2 = NULL;*/

/*printf("輸出合并后的兩個鏈表\n");*/

/*while (pr->m_pNext != NULL)

{

printf("%d", pr->m_pNext->element);

pr = pr->m_pNext;

鏈表 c語言_約瑟夫環 c語言 鏈表_c語言雙向鏈表的基本操作

}*/

return head1;

};

//鏈表查詢

PNODE findList(ListNode *list,int val)

{

PNODE p = list;

if (p->m_pNext == NULL)

{

return;

}

/*int val;*/

int num = 0;

/*printf("輸入要查詢的數:\n");

scanf_s("%d", &val);*/

while(p !=NULL&& p->element!=val)

{

p = p->m_pNext;

num++;

}

if (p != NULL)

{

printf("這個數在第%d個數:", num + 1);

}

else

{

printf("沒有找到這個節點");

}

printf("\n");

}

//鏈表插入

void InsertList(ListNode *list, int pos, int val)

{

int position = 0;

PNODE p = list;

position pos = null。p>:“: 2em"<: 2em"p>: 2em"text-indent,玫瑰早已在帝王宮苑里種植。為何不可>. 搖滾怎么了 <. 童年的時光機 <>>. 記念 <林俊杰>. 超級喜歡 潘瑋柏><<. 走火入魔 <<王力宏>周杰倫>. 我們唱的歌 <張杰>周杰倫>. 單人房 <李小璐>. 不勝依依 <張靚穎>:夢之浮橋 謝娜。

{

p = p->m_pNext;

約瑟夫環 c語言 鏈表_鏈表 c語言_c語言雙向鏈表的基本操作

position++;

}

PNODE tmp = (PNODE)malloc(sizeof(PNODE));

tmp->element = val;

tmp->m_pNext = p->m_pNext;

p->m_pNext = tmp;

}

//鏈表刪除

void deleteAllListNode(ListNode *list)

{

PNODE p,tmp;

p = list->m_pNext;

list->m_pNext = NULL;

while (p != NULL)

{

tmp = p->m_pNext;

free(p);//刪除第一個節點

p = tmp;

}

printf("鏈表刪除成功");

}

//刪除指定節點

void deleListNode(ListNode *list, int pos)

{

int position = 0;

PNODE p;

p = list;

while (p != NULL && position < pos-1)

{

p = p->m_pNext;

position++;

}

PNODE tmp = p->m_pNext;

p->m_pNext = tmp->m_pNext;

free(tmp);

tmp = NULL;

}

// 定義鏈表遍歷函數

鏈表 c語言_約瑟夫環 c語言 鏈表_c語言雙向鏈表的基本操作

void TraverseList(ListNode *List) {

PNODE P = List->m_pNext; // 首節點數組給臨時結點P

printf("遍歷遞歸的值為:");

if (P == NULL)

printf("鏈表為空");

while (P != NULL) //當臨時節點P不為尾節點時c語言雙向鏈表的基本操作c語言雙向鏈表的基本操作,輸出當前節點值

{

printf("%d ", P->element);

P = P->m_pNext;

}

printf("\n");

}

int main() {

int lens = 6;

printf("創建列表1\n");

PNODE list1 = CreateList(lens);

printf("創建列表2\n");

PNODE list2 = CreateList(lens);

int k = 2;

struct ListNode *t;

printf("找到倒數第k個數\n");

t = FindKthToTail(list1, k);

printf("倒數第%d個數是%d\n", k, t->element);

PNODE list;

printf("合并兩個列表\n");

list = ADDList(list1, list2);

printf("遍歷列表\n");

TraverseList(list);

printf("找到第數字為3\n");

findList(list, 3);

printf("在第六個地方插入\n");

InsertList(list, 6, 11111);

TraverseList(list);

printf("在第六個地方刪除\n");

deleListNode(list, 6);

TraverseList(list);

printf("刪除整個列表\n");

deleteAllListNode(list);

return 0;

}

本文來自互聯網,由機器人自動采編,文章內容不代表本站觀點,請讀者自行辨別信息真偽,如有發現不適內容,請及時聯系站長處理。

    相關閱讀
    下载麻将游戏免费 21点点数一样怎么算 北京pk万能计划手机版 足球竞猜新浪投注 亚盘投注app 1分快三押大小单双技巧 重庆时时彩免费计划 好用的做计划的app 利达娱乐投彩 分pk10人工计划 mg摆脱70万大奖