日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单链表的按位置插入和删除

發布時間:2024/7/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单链表的按位置插入和删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單鏈表的插入和刪除

文章目錄

  • 單鏈表的插入和刪除
    • 1 單鏈表插入
    • 2 單鏈表刪除
    • 3 代碼實現

1 單鏈表插入

要想將結點s插入到ai與ai+1之間,不需要移動數據元素,只需要在ai與ai+1之間插入一個新的結點,也就是我們要插入的結點s。關鍵就是要修改結點p的指針域,使得結點s稱為其后繼。

修改指針的鏈接的主要操作語句是:

1. s->next=p->next; //把結點p的后繼作為結點s的后繼; 2. p->next=s; //把結點s作為結點p的后繼;

注意這兩個語句的順序不能調換不能調換不能調換!!!

為什么呢?如果調換①和②的順序,那么插入操作就無法完成,并且會丟失ai結點的地址以及ai及其后面所有結點的信息。


2 單鏈表刪除

刪除操作和插入類似,在刪除一個結點時,不需要移動元素,僅需要修改相應的指針鏈接,改變其前驅和后繼的關系即可。

主要操作語句為(要借助輔助指針變量q):

1. q = p->next; //首先保存b的指針,靠它才能找到c; 2. p->next=q->next; //將a、c兩結點相連,淘汰b結點; 3. free(q); //釋放被刪除結點的空間

3 代碼實現

以下代碼實現了 單鏈表的按位置插入和刪除

#include <stdio.h> #include <stdlib.h> #include <time.h>typedef int ElementType; typedef struct node {ElementType data;struct node *Next; } *List;List CreateList(void) {List L = (List)malloc(sizeof(struct node));L->data = 0;L->Next = NULL;return L; }void InitList(List L) {srand((unsigned)time(NULL));for (int i = 0; i < 10; i++) {List p = (List)malloc(sizeof(struct node));p->data = rand() % 100;p->Next = L->Next;L->Next = p;} }List Find(List L, int position) {List p = L;int i = 0;while (p->Next && i < position) {p = p->Next;i++;}if (i == position) {return p;} else {return NULL;} }void Insert(List L, int position, ElementType e) {List p;List tmp;if (p = Find(L, position - 1)) {tmp = (List)malloc(sizeof(struct node));tmp->data = e;tmp->Next = p->Next;;p->Next = tmp;} }void Delete(List L, int position) {List p;List tmp;if (p = Find(L, position - 1)) {tmp = p->Next;p->Next = tmp->Next;free(tmp);} }void PrtList(List L) {List p = L->Next;while (p) {printf("%d ", p->data);p = p->Next;}printf("\n"); }int main(void) {ElementType e;int position;List L = CreateList();InitList(L);PrtList(L);printf("please input position and element to insert:");scanf("%d%d", &position, &e);Insert(L, position, e);PrtList(L);printf("please input position to delete:");scanf("%d", &position);Delete(L, position);PrtList(L);return 0; }

運行結果如下圖:

總結

以上是生活随笔為你收集整理的单链表的按位置插入和删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。