正文之前

昨天晚上階段性的完成了一部分?jǐn)?shù)學(xué)的復(fù)習(xí),所以今天打算擼一擼代碼,然后發(fā)現(xiàn)提電腦忘指針。所以自己磕磕盼盼,對(duì)照了一下網(wǎng)上的代碼,總算把線性存儲(chǔ)單鏈表的數(shù)據(jù)類型實(shí)現(xiàn),給自己寫出來(lái)了。
廢話不多說(shuō),我也不排版,大家自己好好看,有疑問(wèn)的在下面評(píng)論交流。
正文
一覺醒來(lái),世界都有了變化,上午的焦慮不翼而飛~
下午重新審視了下代碼,發(fā)現(xiàn)了鏈表的頭插法和尾插法的區(qū)別:
頭插法是在已經(jīng)形成的鏈表的頭部插入一個(gè)數(shù)據(jù)塊,尾插法是在已經(jīng)形成的鏈表的尾部插入一個(gè)數(shù)據(jù)塊~
那么你看我的代碼,是用的頭還是尾呢?(溫馨提示:不要看head是頭就回答我哦~)
//main.c
// ZhiZhen
//
// Created by 張照博 on 2017/8/10.
// Copyright ? 2017年 HustWolf. All rights reserved.
//
#define Length 6;
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList InitList()
{
int num;
LNode *L;
L=(LinkList)malloc(sizeof(LNode));
LinkList head=L;
int len=Length;
for(int i=0;i<len;++i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&num);
if(p == NULL)
{
printf("初始化失敗!\n");
exit(-1);
}
p->data=num;
printf("%d hia~\n",p->data);
p->next=head->next;
head->next=p;
head=p;
}
return L;
}
void Insert(LinkList L,int i,int number)
{
int len=Length;
if(i>len){
printf("Fuck U Dicks");
exit(-1);
}
LinkList p;
int Location=i-1;
p=L;
while(Location--)
{
p=p->next;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=number;
s->next=p->next;
p->next=s;
}
int main()
{
LinkList X;
X=InitList();
int len=Length;
Insert(X,2,45);
printf("\n");
++len;
while(len--)
{
printf("%d\t",X->next->data);
X=X->next;
}
return 0;
}
運(yùn)行結(jié)果

實(shí)話實(shí)說(shuō):我的是尾插法,沒錯(cuò),我自己一直以為是頭,結(jié)果是尾巴,是的,沒錯(cuò),每一次head指針都會(huì)移位,那么也就是說(shuō),head其實(shí)是個(gè)假的頭指針,實(shí)際上它是個(gè)尾指針,專門指向目前的最后一個(gè)數(shù)據(jù)塊。L指針才是真正的BOSS頭指針!!
下面是我補(bǔ)上的頭插法的內(nèi)容:
LinkList InitListTou()//頭插法
{
int num;
LNode *L;
L=(LinkList)malloc(sizeof(LNode));
LinkList trial=L;
int len=Length;
for(int i=0;i<len;++i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&num);
if(p == NULL)
{
printf("初始化失敗!\n");
exit(-1);
}
p->data=num;
printf("%d hia~\n",p->data);
trial->next=p;
trial=p;
}
return L;
}
跑起來(lái)一樣66的~

很悲傷的發(fā)現(xiàn),野路子就是野路子,鏈表的頭指針要在main中定義是有道理的,不然我也不會(huì)花了一個(gè)寶貴的下午來(lái)算這個(gè)東西,真是悲傷??!~~?。。?br> 下面是完整版的改過(guò)的代碼,跟上面聯(lián)系基本不大了,新增了Merge和Delete函數(shù),然后主函數(shù)有了點(diǎn)變化,大家自行觀察~
//
// main.c
// ZhiZhen
//
// Created by 張照博 on 2017/8/10.
// Copyright ? 2017年 HustWolf. All rights reserved.
//
#define Length 4;
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LinkList;
void InitList(LinkList head)//尾插法
{
int num;
int len=Length;
for(int i=0;i<len;++i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&num);
if(p == NULL)
{
printf("初始化失敗!\n");
exit(-1);
}
p->data=num;
printf("%d hi~\n",p->data);
p->next=head->next;
head->next=p;
head=p;
}
head->next = NULL;
}
LinkList InitListTou()//頭插法
{
int num;
LNode *L;
L=(LinkList)malloc(sizeof(LNode));
LinkList trial=L;
int len=Length;
for(int i=0;i<len;++i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&num);
if(p == NULL)
{
printf("初始化失敗!\n");
exit(-1);
}
p->data=num;
printf("%d hia~\n",p->data);
trial->next=p;
trial=p;
}
trial->next = NULL;
return L;
}
void Insert(LinkList L,int i,int number)
{
int len=Length;
if(i>len){
printf("Fuck U Dicks");
exit(-1);
}
LinkList p;
int Location=i-1;
p=L;
while(Location--)
{
p=p->next;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=number;
s->next=p->next;
p->next=s;
}
void Merge(LinkList l,LinkList x,int td)
{
LinkList a=l->next;
LinkList b=x->next;
LinkList m,M;
m=l;
M=l;
while(b!= NULL && a!= NULL)
{
if (a->data > b->data)
{
m->next=a;
m=m->next;
a=a->next;
}
else{
m->next=b;
m=m->next;
b=b->next;
}
// m->next=(l->next->data>x->next->data?(l=l->next):(x=x->next));
}
m->next=a?a:b;
LinkList Ta=M->next;
int out;
printf("Merge:\n");
while(Ta)
{ out =Ta->data;
Ta=Ta->next;
printf("%d\t",out);
}
free(b);
}
int main()
{
LinkList X=(LinkList)malloc(sizeof(LNode));
LinkList Y=(LinkList)malloc(sizeof(LNode));
InitList(X);
InitList(Y);
int td=1;
Merge(X,Y,td);
return 0;
}
運(yùn)行結(jié)果:
14
14 hi~
432
432 hi~
456
456 hi~
578
578 hi~
123
123 hi~
545
545 hi~
634
634 hi~
4244
4244 hi~
Merge:
123 545 634 4244 14 432 456 578 Program ended with exit code: 0
正文之后
雖說(shuō)不說(shuō)廢話,但是我還是想問(wèn)一下,各位,覺得下面哪個(gè)寫碼的環(huán)境好一點(diǎn)?我個(gè)人比較偏向于第一個(gè)的UI,但是第二個(gè),報(bào)錯(cuò)報(bào)得更好。

