线性表
云深不知处……
大二计算机在读生 现目前状况 考研狗 想要拥有一条技术栈
展开
-
合并为递增序列
直接上代码NODE combine(NODE L1,NODE L2) { NODE r; NODE p1 = L1->next; NODE p2 = L2->next; L1->next = NULL; while( p1!=NULL && p2!=NULL) { if(p1->data < p2->data) { r = p1; p1 = p1->next; } else if(p1->d原创 2020-10-30 14:46:07 · 218 阅读 · 0 评论 -
合并为递减序列
直接上代码NODE combine(NODE L1,NODE L2) { NODE r; NODE p1 = L1->next; NODE p2 = L2->next; NODE C = (NODE)malloc(sizeof(lnode)); //L1->next = NULL; NODE M = C; M->next = NULL; while( p1!=NULL && p2!=NULL){ if(p1->data <原创 2020-10-30 14:39:44 · 192 阅读 · 1 评论 -
链表(开辟和不开辟新空间)
开辟新空间1相当于创建了一个链表,因此需要创造一个内存空间2要定义一个移动指针3因为是新链表,所以如果将跳出的节点插入这个新链表中,可以用头插或者尾插创造一个新节点交换此节点的数据域,这样原节点和这个节点所在的链表不会发生改变。不开辟新空间1需要先...原创 2020-10-30 14:24:30 · 2892 阅读 · 0 评论 -
交集并集完整版(开辟和不开辟空间)
不开辟新空间的并集和交集并集如下void unionlink(NODE A,NODE B){ NODE q,d; int c = 0; NODE p1 = A->next; NODE p2 = B->next; A->next = NULL;//不开辟新链表 直接将A改成新链表 while(p2!=NULL)//先将p2 插入一个链表中; 然后将p2与p1不同的再插入 { d = p2; p2 = p2->next; d->ne原创 2020-10-30 13:52:52 · 393 阅读 · 0 评论 -
链表将x插入合适的位置
新建递减有序的单链表L,从头找起,找到第一个比x小(或相等)的结点数据,把x插入这个数所在的位置即可void insert(NODE L){ int x; printf("请输入要插入的数\n"); scanf("%d",&x); printf("\n"); NODE p = L; while(x < p->data) { p = p->next; } if(!p) { printf("失败\n"); } else { NODE new原创 2020-10-26 20:53:29 · 877 阅读 · 0 评论 -
链表中需要注意的问题
因为头指针不能动 所以要定义一个移动指针链表申请的本质就是地址 所以传参的时候就是传这个指针 你在任意函数改变了这个地址里面的数 所以这个链表就会发生改变原创 2020-10-10 23:08:08 · 545 阅读 · 1 评论 -
双链表插入(后插前插)删除完整
双链表插入(后插前插)删除完整值查跳出的位置是当前p的位置NODE zhifind(NODE headnode){ int x,i,e; NODE p = headnode->next; printf("请输入查询的数\n"); scanf("%d",&i); while(p && i!= p->data) { p = p->next; } if(!p) { printf("失败\n"); } else原创 2020-10-07 07:47:24 · 1091 阅读 · 1 评论 -
反思2
1老师 学校教的数据结构是c 学数据结构c和c++都可以2而学算法的话要c++或者java c不太方便3但是我们下学期开课如果分班要学java4考研数据结构也是c或者c++ 伪代码 上机编程三种语言都适合所以要不要自学c++ 感觉c++可以把数据结构串起来 如果不学 感觉即使学了算法 用java转换过来也很麻烦...原创 2020-07-24 13:34:37 · 151 阅读 · 0 评论 -
开始数据结构的学习
目前学到了链表的操作 先说一点我自己明白过来的东西在链表操作中 遍历有两种形式 (带头结点的链表) 1. `p = headnode->next;` 2. `p = headnode;` 对应的两种while循环```cwhile( p -> data != x)p = p->nextwhile(p ->next ->data != x)p = p->next第一种是直接从第一个结点开始 所以判断条件第一个为 p->data;所以原创 2020-09-23 22:08:41 · 214 阅读 · 4 评论 -
链表增查完整 值查和位置节点查
链表增删改查完整查询值查跳出的地址是p的当前地址 NODE p; p = headnode->next; while(p && p->data != x) { p = p->next; } if(!p) { return NULL; } else { printf("%d\n",p->data); return p; } 节点位置查跳出的p是p的前一个地址 NODE q; q=headnode; int原创 2020-09-27 11:06:55 · 207 阅读 · 2 评论 -
现认识数据结构中结构体的运用
结构体类型分为两种struct date {int month;int year };struct date day 类型是struct date 变量是day typedef struct{}luck,*NODE;luck *day; 类型是luck 变量是day 指针 NODE headnode 类型是NODE 变量是headnode 指针 **结构体初始化** 1.struct date day={1,2} 自动匹配给值 luck headnode={原创 2020-09-30 22:11:33 · 199 阅读 · 1 评论 -
算法(将x插入线性表合适的位置)
直接上代码void insert(sqlist *L,int x){ int i,j,t; i = L->length-1; //直接定义成数组表示的形式 while(i>=0 && x < L->data[i])//必须要大于等于0 因为最后一个数是a[0] { i--; } //在x等于这个数的那个节点 i 跳出 printf("%d\n",i); for(j = L->length-1;j &g原创 2020-10-04 21:57:01 · 773 阅读 · 2 评论 -
算法(顺序表逆置 单链表逆置)
顺序表逆置两两交换分别是首尾交换一次和中间两个数交换一次 所以这种逆置方法的交换次数是总长度的一半n/2;void nizhi(sqlist *L){ int i,t; for(i = 0;i <= L->length-3;i++) { t = L->data[i]; L->data[i] =L->data[L->length-1-i]; L->data[L->length-i-1] = t; } for(i = 0;i&l原创 2020-10-04 22:31:06 · 1018 阅读 · 1 评论