实现线性表的遍历查询插入删除合并
来源:互联网 发布:mac terminal 有趣 编辑:程序博客网 时间:2024/04/30 05:24
数据结构 书上给的代码 仅仅是 在某个特定的位置 插入 某一个元素。
那样不是 线性表的要求。 申请动态内存空间神马的 真费劲, 不熟练。
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>#include <cmath>#include <cstdlib>#include <string>#include <map>#include <vector>#include <set>#include <queue>#include <stack>#include <cctype>using namespace std;typedef long long ll;typedef unsigned long long ull;#define maxn 10010#define INF 1<<30#define list_init_size 100#define list_incre 10struct sqlist{ int * elem; int length; int listsize;};int init(sqlist & l){ // 初始化线性表 l.elem = (int *)malloc(list_init_size * sizeof(int)); if(!l.elem) return 0; l.length = 0; l.listsize = list_init_size; return 1;}int search_list(sqlist &l, int num){ // 在表中寻找 num 返回的是 下标值 如果返回第几个数 需要加 1 for(int i = 0; i < l.length; i++){ if(l.elem[i] == num) return i; // 返回下标值 } return -1;}int insert_list(sqlist &l, int num){ // 在表中插入 num if(l.length == 0){ // 没有数据 直接插入 int *p = l.elem; p[0] = num; l.length++; return 1; } int *p = &l.elem[l.length]; int flag = 1; if(l.length >= l.listsize){ int * newbase = (int *)realloc(l.elem,(l.listsize + list_incre) *sizeof(int)); if(!newbase) return 0; l.elem = newbase; l.listsize += list_incre; } int *q; int * sta = l.elem; if((num <= (*sta))){ // 当 插入的位置为 最开头时 for(int *x = p-1; x >= sta; x--) *(x+1) = *x; *(sta) = num; l.length ++; return 1; } for(q = l.elem; q < p; q ++){ if((num >= (*q) && (num < (*(q+1)) || q == p-1))) break; } if(q == p){ // 插入位置为 最后时 *(p+1) = num; } else{ // 插入位置为 中间时 for(int *x = p-1; x >= q+1; x--) *(x+1) = *x; *(q+1) = num; } l.length ++;}int list_b(sqlist &l){ // 显示表 for(int * q = l.elem; q < &(l.elem[l.length]); q++) printf("%d ",(*q)); printf("\n");}int delete_list(sqlist & l, int num){ // 删除表中 的 元素 num (只会删除 第一个num 如果需要删除所有的num,加一层循环即可) int *p = &l.elem[l.length]; for(int *q = l.elem; q < p; q++){ if((*q) == num){ for(int *j = q; j <= p-1; j++){ *(j) = *(j+1); } --l.length; return 1; } } return 0;}int union_list(sqlist &l1, sqlist & l2, sqlist &l){ // 把 两个 l1 l2 结合成 l int * pa = l1.elem; int * pb = l2.elem; l.listsize = l.length = l1.length + l2.length; int * pc = l.elem = (int *)malloc(l.listsize*sizeof(int)); if(!l.elem) return 0; int *pa_last = l1.elem + l1.length - 1; int *pb_last = l2.elem + l2.length - 1; while(pa <= pa_last && pb <= pb_last){ if(*pa <= *pb) *pc++ = * pa++; else *pc++ = *pb++; } while(pa <= pa_last) *pc++ = *pa++; while(pb <= pb_last) *pc++ = *pb++;}int main (){ sqlist q,p; init(q); insert_list(q,4); // 4 3 2 1 顺序 依次插入 结果为 1 2 3 4 insert_list(q,3); insert_list(q,2); insert_list(q,1); list_b(q); delete_list(q,3); // 删除3 list_b(q); printf("****************\n"); init(p); insert_list(p,2); insert_list(p,6); insert_list(p,4); insert_list(p,8); list_b(p); delete_list(p,4); list_b(p); printf("****************\n"); sqlist af; init(af); union_list(q,p,af); // 结合 p q 两个表 为 af list_b(af); return 0;}
0 0
- 实现线性表的遍历查询插入删除合并
- 【数据结构】顺序线性表的插入、删除、合并实现
- 线性表的插入,删除,合并,查找
- C语言:实现线性表基本表示(数组元素的删除,插入,合并)
- 单链线性表的创建,插入,删除及合并
- 线性表的插入删除(java实现)
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 线性表初始化、判空、插入、删除、遍历、修改、查值、合并
- 【数据结构】线性表的顺序表示和实现,实现插入和删除算法,并且实现顺序表的合并
- C++实现二叉树的插入、删除、查询、遍历
- 线性表的 插入 删除
- 线性表的插入删除
- 线性表的插入删除
- 线性表的添加、删除、插入功能的顺序实现
- C语言实现线性表的插入和删除操作
- C语言实现顺序线性表的表示、插入、删除
- 顺序表的实现,插入,删除,定位,合并,打印
- 数据结构之线性表(建表-插入-删除-合并)
- gsoap namespace 修改
- Java UDP网络编程 - 最简单示例
- swift_重载和自定义运算符
- Fuel PHP框架中的分页实现
- JQuery实现页面刷新后菜单保留鼠标点击addclass的样式
- 实现线性表的遍历查询插入删除合并
- iOS模块开发—登陆注册
- 利用coredump定位出错的代码行
- Hadoop初步使用:WordCount函数示例
- Java NIO使用及原理分析 (一)
- 《编写可读性代码的艺术》读书笔记 第二部分 简化循环和逻辑
- เล่นบาคาร่าแบบเดินสายได้ที่คาสิโนออนไลน์ของเรา
- 数学是成就卓越开发人员的必备技能
- 我的剪切板