链表删除功能实现演示
生活随笔
收集整理的這篇文章主要介紹了
链表删除功能实现演示
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
插入算法和刪除演示:
#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //數據域struct Node * pNext; //指針域}Node, *pNode;//函數聲明 pNode create_list(); void traverse_list(pNode pHead); //遍歷bool is_empty(pNode pHead); //判斷鏈表是否為空 int length_list(pNode pHead); //鏈表的長度 bool insert_list(pNode, int, int); //插入 第一個參數表示插入的鏈表 第二個參數表示插入的位置 第三個參數表示插入的元素 bool delete_list(pNode, int, int *); //第一個參數表示要刪除的位置,第二個參數表示要刪除的位置 第三參數表示刪除的元素的地址放入指針 void sort_list(pNode pHead);int main(void) {pNode pHead = NULL; //等價于 struct Node *pHead=NULLpHead = create_list(); //create_list()創建一個非循環單鏈表,并將該鏈表的頭結點的地址賦給pHeadtraverse_list(pHead); //遍歷輸出/**int len = length_list(pHead);printf("鏈表的長度%d\n", len);sort_list(pHead); //選擇排序traverse_list(pHead); //遍歷輸出*/insert_list(pHead, 4, 33);traverse_list(pHead);//遍歷輸出int val;if (delete_list(pHead, 4, &val)) {printf("刪除成功,刪除的元素%d:\n",val);}else {printf("刪除失敗,刪除的元素不存在%d:\n",val);}traverse_list(pHead);//遍歷輸出while(true){}return 0; }//創建單鏈表 pNode create_list() {int len; //用來存放有效節點數int i;int val; //存放用戶臨時輸入的節點數據//我們首先要先生成一個頭結點 不存放有效數據pNode pHead = (pNode)malloc(sizeof(Node));if (NULL == pHead) {printf("內存分配失敗");//程序退出exit(-1);}pNode pTail = pHead; //pTail也指向了頭結點pTail->pNext = NULL;printf("請輸入你要輸入節點的個數 len =");scanf_s("%d", &len);//假設輸入的長度5,我們需要循環for ( i = 0; i < len; i++){printf("請輸入第%d個節點的值:", i + 1);scanf_s("%d", &val);pNode pNew=(pNode)malloc(sizeof(Node));if (NULL == pNew) {printf("內存分配失敗");//程序退出exit(-1);}pNew->data = val;//pHead->pNext = pNew;//pNew->pNext = NULL;pTail->pNext = pNew; //將這個新節點掛到尾節點pNew->pNext = NULL;pTail = pNew;}return pHead; }//遍歷 void traverse_list(pNode pHead) {pNode p = pHead->pNext;while (p!=NULL){printf("%d ",p->data);p = p->pNext;}//換行printf("\n");return; }//判斷鏈表是否為空 bool is_empty(pNode pHead) {if (NULL == pHead->pNext) {return true;}else {return false;} }//求一個鏈表的長度 int length_list(pNode pHead) {pNode p=pHead->pNext; //第一個節點int len = 0;while (NULL != p) { //只要指針指向的下一個元素不是空,指針就繼續向后移動++len;p=p->pNext;}return len; }//排序算法 void sort_arr(pNode pHead) {int i, j, tmp;int arr[6] = { 5,8,45,2,9,3 };int len=length_list(pHead); //獲取鏈表長度pNode p, q;for (i = 0; i < len-1; i++){for (j = i+1; j < len; j++){}}}//選擇排序 從小到大排 void sort_list(pNode pHead){int i,j,t;int len = length_list(pHead); //獲取鏈表長度pNode p,q;for (i = 0, p = pHead->pNext; i < len - 1; ++i, p = p->pNext){for (j = i + 1, q = p -> pNext; j < len; ++j, q = q->pNext) {if (p->data > q->data) { //類似于 數組中的: a[i] > a[j]t = p->data; //類似于數組中的: t = a[i];p->data = q->data; //類似于數組中的: a[i] = a[j];q->data = t; // 類似于數組中的: a[j] = t;}}} }//在pHead所指向鏈表的第pos個節點的前面插入-一個新的結點,該節點的值是val,并 且pos的值是從1開始 bool insert_list(pNode pHead, int pos, int val) {int i = 0;pNode p = pHead;while (NULL != p && i < pos - 1) {p = p->pNext;++i;}if (i > pos - 1 || NULL == p) {return false;}pNode pNew = (pNode)malloc(sizeof(Node));if(NULL == pNew){printf("動態分配內存失敗!");exit(-1);}pNew->data = val;//定義一個臨時節點,數據交換存儲pNode tmp = p->pNext;p->pNext=pNew;pNew->pNext = tmp;return true;}bool delete_list(pNode pHead, int pos, int * val) {int i = 0;pNode p = pHead;while (NULL != p->pNext && i < pos - 1) {p = p->pNext;++i;}if (i > pos - 1 || NULL == p->pNext) {return false;}pNode tmp=p->pNext; //將需要刪除的節點臨時保存起來*val = tmp->data;p->pNext = p->pNext->pNext; //刪除p節點后一個節點free(tmp);tmp = NULL;return true; }?
總結
以上是生活随笔為你收集整理的链表删除功能实现演示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5中音频、视频标签、自定义播放器
- 下一篇: Java Graphics类的绘图方法