</pre><pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
//鏈表的定義
typedef void List;
typedef void ListNode;
//鏈式鏈表的相關定義
typedef struct _tag_linklist SqList;
typedef struct _tag_linkNode SqListNode;
typedef int Sqdata;
//創建一個空鏈表,並返回
List * List_Create();
//將鏈表清空
void List_Clear(List * list);
//銷燬鏈表
void List_Destroy(List *list);
//刪除節點的數據爲data的數據並返回刪除的數據
Sqdata List_Delete(List *list,Sqdata data);
//往鏈表內插入節點
int List_Insert(List * list,ListNode * node);
//得到鏈表中節點數據爲data的節點指針
ListNode * List_Get(List * list,Sqdata data);
//返回鏈表的長度
int List_Length(List *list);
//定義鏈式鏈表的結構
struct _tag_linklist{
SqListNode * HNode;
SqListNode * ENode;
};
struct _tag_linkNode{
Sqdata data;
SqListNode * nNode;
};
//線性順序存儲鏈表具體操作的相關實現
List * List_Create()
{
SqList * ret = (SqList *)malloc(sizeof(SqList));
if(ret != NULL){
ret->HNode=ret->ENode = NULL;
}
return ret;
}
void List_Clear(List * list)
{
SqList * tlist = (SqList *)list;
if(tlist != NULL){
tlist->HNode=tlist->ENode = NULL;
}
}
void List_Destroy(List *list)
{
free(list);
}
int List_Insert(List * list,ListNode * node)
{
SqList * tlist = (SqList *)list;
if(tlist !=NULL){
if(tlist->HNode == NULL){
tlist->HNode = tlist->ENode = (SqListNode *) node ;
}else{
tlist->ENode->nNode = (SqListNode *) node ;
tlist->ENode = (SqListNode *) node ;
}
return 1;
}
return 0;
}
Sqdata List_Delete(List *list,Sqdata data)
{
SqList * tlist = (SqList *)list;
SqListNode * dnode = (SqListNode *)List_Get(list,data);
SqListNode rnode = *dnode;
SqListNode * tnode = tlist->HNode;
int i;
if(tlist !=NULL && tnode != NULL && dnode != NULL){
while(tnode->nNode != dnode){
tnode = tnode->nNode;
}
tnode->nNode = tnode->nNode->nNode;
free(tnode->nNode);
}else{
printf("ERROR:不存在該節點或鏈表不存在\n");
}
return rnode.data;
}
ListNode * List_Get(List * list,Sqdata data)
{
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist != NULL && tnode !=NULL)
{
while(tnode != tlist->ENode->nNode){
if(tnode->data==data){
return tnode;
}
tnode = tnode->nNode;
}
}
return NULL;
}
int List_Length(List *list)
{
int count=-1;
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist !=NULL) {
count++;
while(tnode != tlist->ENode->nNode){
count++;
tnode = tnode->nNode;
}
}
return count;
}
//添加輸出函數用於具體測試
void List_Print(List *list)
{
int count =0;
SqList * tlist = (SqList *)list;
SqListNode * tnode = tlist->HNode;
if(tlist != NULL){
while(tnode != tlist->ENode->nNode){
printf("第%d個元素:%d\n",count,tnode->data);
count++;
tnode = tnode->nNode;
}
}
}
int main()
{
SqListNode a[5];
int i;
List * list = List_Create();
for(i=0;i<5;i++){
a[i].data = i+1;
a[i].nNode = NULL;
}
for(i=0;i<5;i++){
List_Insert(list,&a[i]);
}
List_Print(list);
printf("鏈表的長度:%d\n",List_Length(list));
printf("被刪除的數據是:%d\n",List_Delete(list,3));
List_Print(list);
printf("鏈表的長度:%d\n",List_Length(list));
printf("%d\n",((SqListNode *)List_Get(list,2))->data);
return 0;
}
菜鳥之路--線性表__鏈式存儲
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.