還是先來嘮嘮最近發生的事把。
ok,拿到獎學金,被選爲優秀團員,我一點感覺都沒有。最近讓我比較激動的是我參加了學校的盛特杯,這件事本來我是不想參與的,我覺得我還太弱,沒有能力去做一個項目。但是導師給我電郵讓我參加,我想幹脆就抱個大腿吧,讓大腿教教我怎麼做項目,於是就找了個大二的學長。額,目前這件事還沒有任何進展,可能是大腿要考研比較忙吧。由於劉同到高中母校演講,最近又有電影上映,於是我就去買了《誰的青春不迷茫》來看。我靠,真的是一本爛的不能再爛的書啊,以後這種書堅決不自己買了,還是去圖書館看。
今早上去圖書館對數據結構進行攻關,把雙向鏈表的代碼寫出來了,雙向鏈表就是在單向鏈表的基礎上再加一個前驅,其他的大致都與單向鏈表差不多,主要包含初始化,插入刪除查找的功能。
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct DulNode
{
Elemtype data;
struct DulNode *prior;
struct DulNode *next;
}DulNode,*Dulinklist;
void InitDulNode(DulNode *head)// 創建一個雙向鏈表的表頭,前驅和後繼都指向自己
{
head->prior=head;
head->next=NULL;
}
DulNode *GetElemp_dul(DulNode *head,int i)
{
int j=1;
DulNode *p=head->next;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j==i)
{
return p;
}
else
return 0;
}
int Listinsert_Dul(DulNode *head,int pos,int e)//pos爲要插入的位置,e爲插入節點的值
{
DulNode *p;
p=GetElemp_dul(head,pos);
if(!p)
{
printf("pos error!\n");
return 0;
}
DulNode *s;
if(!(s=(Dulinklist)malloc(sizeof(DulNode))))
return 0;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return 1;
}
void Print(DulNode *head)
{
DulNode *p;
p=head->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;
}
}
void CreatDulNode(DulNode *head,int e)
{
DulNode *p;
p=(DulNode *)malloc(sizeof(DulNode));
p->data=e;
p->next=NULL;
if(head->next==NULL)
{
p->prior=head;
head->next=p;
}
else
{
head->next->prior=p;
p->next=head->next;
p->prior=head;
head->next=p;
}
}
int Listdelete_Dul(DulNode *head,int i)
{
DulNode *p;
p=GetElemp_dul(head,i);
if(!p)
{
printf("delete pos error!\n");
return 0;
}
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return 1;
}
int main()
{
DulNode *head;
head=(DulNode *)malloc(sizeof(DulNode));
int i;
InitDulNode(head);
for(i=0;i<10;i++)
{
CreatDulNode(head,i);
}
Listinsert_Dul(head,4,100);
Listdelete_Dul(head,4);
Print(head);
return 0;
}
這代碼還是花了我1個多小時才寫出來的,哎,太花時間了。