正文之前
昨天晚上階段性的完成了一部分數(shù)學(xué)的復(fù)習(xí)利职,所以今天打算擼一擼代碼趣效,然后發(fā)現(xiàn)提電腦忘指針。所以自己磕磕盼盼猪贪,對照了一下網(wǎng)上的代碼跷敬,總算把線性存儲單鏈表的數(shù)據(jù)類型實現(xiàn),給自己寫出來了热押。
廢話不多說西傀,我也不排版,大家自己好好看桶癣,有疑問的在下面評論交流拥褂。
正文
一覺醒來,世界都有了變化牙寞,上午的焦慮不翼而飛~
下午重新審視了下代碼饺鹃,發(fā)現(xiàn)了鏈表的頭插法和尾插法的區(qū)別:
頭插法是在已經(jīng)形成的鏈表的頭部插入一個數(shù)據(jù)塊,尾插法是在已經(jīng)形成的鏈表的尾部插入一個數(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;
}
運行結(jié)果
實話實說:我的是尾插法,沒錯雷蹂,我自己一直以為是頭伟端,結(jié)果是尾巴,是的匪煌,沒錯责蝠,每一次head指針都會移位,那么也就是說萎庭,head其實是個假的頭指針霜医,實際上它是個尾指針,專門指向目前的最后一個數(shù)據(jù)塊驳规。L指針才是真正的BOSS頭指針k攘病!
下面是我補上的頭插法的內(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;
}
跑起來一樣66的~
很悲傷的發(fā)現(xiàn)吗购,野路子就是野路子医男,鏈表的頭指針要在main中定義是有道理的,不然我也不會花了一個寶貴的下午來算這個東西捻勉,真是悲傷岸扑蟆!~~u馄簟1ㄕ恕研底!
下面是完整版的改過的代碼,跟上面聯(lián)系基本不大了透罢,新增了Merge和Delete函數(shù)榜晦,然后主函數(shù)有了點變化,大家自行觀察~
//
// 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;
}
運行結(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
正文之后
雖說不說廢話琐凭,但是我還是想問一下芽隆,各位,覺得下面哪個寫碼的環(huán)境好一點统屈?我個人比較偏向于第一個的UI胚吁,但是第二個,報錯報得更好愁憔。