单链表的按位置插入和删除
生活随笔
收集整理的這篇文章主要介紹了
单链表的按位置插入和删除
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
單鏈表的插入和刪除
文章目錄
- 單鏈表的插入和刪除
- 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; }運行結果如下圖:
總結
以上是生活随笔為你收集整理的单链表的按位置插入和删除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么百度查到的ip地址和ipconfi
- 下一篇: SSM:Maven整合ssm时的步骤