2_單鏈表基本操作

/****date:2014.12.07*****/

/***單鏈表節本操作***/ 

單鏈表:是物理存儲單元非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。由一系列結點(鏈表中每一個元素稱爲結點)組成,結點可以動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。

typedef struct  
{
char key[10]; //關鍵字
char name[20];
int age;
}Data;  //定義節點類型


typedef struct Node   //定義鏈表數據結構
{
Data nodeData;
struct Node * nextNode;

}CLType;


//追加尾節點
CLType * CLAddEnd(CLType * head,Data nodeData)
{
CLType * node,* htemp;
if (!(node=(CLType*)malloc(sizeof(CLType))))
{
printf("申請內存失敗\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=NULL;
if (head==NULL)
{
head=node;
return head;
}
htemp=head;
while (htemp->nextNode!=NULL)
{
htemp=htemp->nextNode;
}
htemp->nextNode=node;
return head;
}

}


//插入頭結點
CLType * CLAddFirst(CLType * head,Data nodeData)
{
CLType * node;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申請內存失敗\n");
return NULL;
}
else
{
node->nodeData=nodeData;
node->nextNode=head;
head=node;
return head;
}

}


//查找節點
CLType * CLFindNode(CLType * head,char * key)
{
CLType * htemp;
htemp = head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
return htemp;
}
htemp=htemp->nextNode;
}
return NULL;

}


//插入節點
CLType * CLInsertNode(CLType * head,char * findkey,Data nodeData)
{
CLType * node,* nodetemp;
if (!(node=(CLType *)malloc(sizeof(CLType))))
{
printf("申請內存失敗\n");
return 0;
}
node->nodeData=nodeData;
nodetemp=CLFindNode(head,findkey);
if (nodetemp)
{
node->nextNode=nodetemp->nextNode;
nodetemp->nextNode=node;

else
{
printf("未找到正確的插入位置\n");
free(node);
}
return head;

}


//刪除節點
int CLDeleteNode(CLType *head,char * key)
{
CLType * node,* htemp; // node保存刪除節點的前一節點
htemp=head;
node=head;
while (htemp)
{
if (strcmp(htemp->nodeData.key,key)==0)
{
node->nextNode=htemp->nextNode;
free(htemp);
return 1;

else
{
node=htemp;
htemp=htemp->nextNode;
}
}
return 0;

}


//計算鏈表長度
int CLLength(CLType *head)
{
CLType * htemp;
int len=0;
htemp=head;
while (htemp)
{
len++;
htemp=htemp->nextNode;
}
return len;

}


//顯示所有節點
void CLAllNode(CLType *head)
{
CLType * htemp;
Data nodeData;
htemp=head;
printf("當前鏈表共有 %d 個節點,鏈表所有數據如下:\n",CLLength(head));
while (htemp)
{
nodeData=htemp->nodeData;
printf("節點 (%s %s %d)\n",nodeData.key,nodeData.name,nodeData.age);
htemp=htemp->nextNode;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章