数据结构的删除操作
来源:互联网 发布:大数据靠什么盈利 编辑:程序博客网 时间:2024/06/05 15:02
1.顺序表的删除:
bool ListDelete(SqList *&L,int i,ElemType &e) //删除数据元素{int j;if (i < 1 || i > L -> length)//参数错误时返回falsereturn false;i--; //将顺序表逻辑序号转化为物理序号e = L -> data[i];for (j = i;j < L -> length - 1;j++)//将data[i]之后的元素前移一个位置L -> data[j] = L -> data[j + 1];L -> length--;//顺序表长度减1return true; //成功删除返回true}
2.单链表的删除:
bool ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素{int j = 0;LinkList *p = L, *q;//p指向头节点,j置为0(即头节点的序号为0)while (j < i - 1 && p != NULL)//查找第i-1个节点{ j++;p = p -> next;}if (p == NULL)//未找到第i-1个节点,返回falsereturn false;else //找到第i-1个节点*p{ q = p -> next;//q指向第i个节点if (q == NULL)//若不存在第i个节点,返回falsereturn false;e = q -> data;p -> next = q -> next;//从单链表中删除*q节点free(q); //释放*q节点return true; //返回true表示成功删除第i个节点}}
3.双链表的删除:
bool ListDelete(DLinkList *&L, int i, ElemType &e) //删除数据元素{int j = 0;DLinkList *p = L,*q;while (j < i - 1 && p != NULL){j++;p = p -> next;}if (p == NULL)//未找到第i-1个结点return false;else //找到第i-1个结点*p{q = p -> next;//q指向要删除的结点if (q == NULL) return false;//不存在第i个结点e = q -> data;p -> next = q -> next;//从单链表中删除*q结点if (p -> next != NULL) p -> next -> prior = p;free(q); //释放*q结点return true;}}
4.循环单链表的删除:
bool ListDelete(LinkList *&L,int i,ElemType &e) //删除元素{int j = 0;LinkList *p = L, *q;if (p -> next != L)//原单链表不为空表时{if (i == 1) //i==1时{q = L -> next;//删除第1个结点e = q -> data;L -> next = q -> next;free(q);return true;}else //i不为1时{p = L -> next;while (j < i - 2 && p != L){j++;p = p -> next;}if (p == L) //未找到第i-1个结点return false;else //找到第i-1个结点*p{q = p -> next;//q指向要删除的结点e = q -> data;p -> next = q -> next;//从单链表中删除*q结点free(q); //释放*q结点return true;}}}else //空表返回falsereturn false;}
5.循环双链表的删除:
bool ListDelete(DLinkList *&L,int i,ElemType &e) //删除数据元素{int j = 0;DLinkList *p = L,*q;if (p -> next != L)//原双链表不为空表时{ if (i == 1) //i==1时{ q = L -> next;//删除第1个结点e = q -> data;L -> next = q -> next;q -> next -> prior = L;free(q);return true;}else //i不为1时{ p = L -> next;while (j < i - 2 && p != NULL){j++;p = p -> next;}if (p == NULL)//未找到第i-1个结点return false;else //找到第i-1个结点*p{q = p -> next;//q指向要删除的结点if (q == NULL) return false; //不存在第i个结点e = q -> data;p -> next = q -> next;//从单链表中删除*q结点if (p -> next != NULL) p -> next -> prior = p;free(q); //释放*q结点return true;}}}else //原双链表为空表时return false;}
6.顺序栈的出栈:
bool Pop(SqStack *&s,ElemType &e) //出栈{ if (s -> top == -1) //栈为空的情况,即栈下溢出return false;e = s -> data[s -> top];//取栈顶指针元素的元素s -> top--; //栈顶指针减1return true;}
7.链栈的出栈:
bool Pop(LiStack *&s,ElemType &e) //出栈{ LiStack *p;if (s -> next == NULL)//栈空的情况return false;p = s -> next;//p指向开始节点e = p -> data;s -> next = p-> next;//删除*p节点free(p); //释放*p节点return true;}
8.顺序队列的出队:
bool deQueue(SqQueue *&q, ElemType &e) //出队{if (q -> front == q -> rear)//队空下溢出return false;q -> front = (q -> front + 1) % MaxSize;e = q -> data[q -> front];return true;}
9.链队列的出队:
bool deQueue(LiQueue *&q, ElemType &e) //出队{ QNode *t;if (q -> rear == NULL)//队列为空return false;t=q->front; //t指向第一个数据节点if (q -> front == q -> rear) //队列中只有一个节点时q -> front = q -> rear = NULL;else //队列中有多个节点时q -> front = q -> front -> next;e = t -> data;free(t);return true;}
10.顺序串的删除:
LiString *DelStr(LiString *s, int i, int j){ int k;LiString *str, *p=s->next, *q, *r;str = (LiString *)malloc(sizeof(LiString));str -> next = NULL;r = str; //r指向新建链表的尾节点if (i <= 0 || i > StrLength(s) || j < 0 || i + j - 1 > StrLength(s))return str; //参数不正确时返回空串for (k = 0; k < i - 1; k++) //将s的前i-1个节点复制到str{ q = (LiString *)malloc(sizeof(LiString));q -> data = p -> data;r -> next = q; r = q;p = p -> next;}for (k = 0; k < j; k++)//让p沿next跳j个节点p = p -> next;while (p != NULL)//将*p及其后的节点复制到str{ q = (LiString *)malloc(sizeof(LiString));q -> data = p -> data;r -> next = q; r = q;p = p -> next;}r -> next = NULL;return str;}
- 数据结构的删除操作
- 数据结构 单链表的删除操作
- [数据结构]双链表删除结点P的操作
- 数据结构-----AVL树的插入删除操作
- C++ 数据结构的单链表的建立,插入,删除操作
- 数据结构:线性表删除操作的php和js实现
- 数据结构:线性表删除操作的php和js实现
- 实战数据结构(2)_两个单链表间的删除操作
- 【数据结构】平衡二叉树的构建以及增加删除操作
- 【数据结构_链表_List_0953】单链表的删除操作实现
- 数据结构——单链表的创建、删除、遍历以及节点的插入、删除等操作
- 【数据结构】二叉排序树的删除
- 【数据结构】尾插法建立单链表 以及删除操作
- C++数据结构---链表(删除操作)
- 【数据结构】采用数组的形式实现顺序表的建立、插入、删除等操作
- 链表的相关操作查找插入删除(c++ 数据结构)
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- 怎么利用编译器优化程序
- Linux内核--基于Netfilter的内核级包过滤防火墙实现
- Web应用程序项目XX已配置为使用IIS
- 一款能解决IE6的PNG透明原生JS插件DD_belatedPNG
- 条条大路通罗马——由C语言中十进制转换为二进制想到的
- 数据结构的删除操作
- 变量、时间、函数、类等集合
- ibatis2.3源码之数据源&连接池浅析
- spring单元测试
- js组件 - 自定义下拉框条件区间选择组件(1.0.2V)
- android animation 动画
- FFT算法的完整DSP实现
- 获取sqlserver中数据库当前连接数
- android部分默认设置的修改