データ構造-リニアテーブル-シングルチェーンテーブル
8050 ワード
シングルチェーンの定義
シングルチェーン表:次のノードを指す構造体を持つ.
機能の説明新しいチェーンテーブル を作成します.取得長さ インデックス検索 値で を検索します.、あるノード を削除する.特定の結点値を変更する 後に結点を追加します. すべての結点内容を表示する コードの実装
シングルチェーン表:次のノードを指す構造体を持つ.
機能の説明
#include
#include
typedef struct LNode{
int num;
LNode * next;
};
//
LNode * creatLNode(){
LNode * lNode=(LNode *)malloc(sizeof(LNode));
lNode->next=NULL;
return lNode;
}
//
int lengthLNode(LNode *L){
int i=0;
LNode *lNode=L;
while(lNode->next!=NULL){
lNode=lNode->next;
i++;
}
return i+1;// +1, , i , +1
}
int getLenth(LNode *L){
int length=0;
LNode *p=L;
while (p){
p=p->next;
length++;
}
return length;
}
//
bool addLnode(LNode * L,int num){
LNode * last=L;
LNode * lnode=(LNode *)malloc(sizeof(LNode));
lnode->num=num;
lnode->next=NULL;
while (last->next!=NULL){
last=last->next;
}
last->next=lnode;
return true;
}
//
LNode * findNodeByIndex(LNode *L,int index){
LNode *p=L;
int i=0;
while (p!=NULL&&i<index){
p=p->next;
i++;
}
if(i==index)return p;
else return NULL;
}
//
LNode *findLNodeByValue(LNode *L,int value){
LNode *p=L;
while(p){
if(p->num==value){
return p;
}
p=p->next;
}
return NULL;
}
LNode * findLNodeByV2(LNode *L, int value){
LNode *p=L;
while (p!=NULL&&p->num!=value){
p=p->next;
}
return p;
}
//
// ,
LNode* insert(LNode *L,int index,int num){
LNode* p;
LNode *newL=(LNode *)malloc(sizeof(LNode));
newL->num=num;
if (index==0){
newL->next=L;
return newL;
}
//
p=findNodeByIndex(L,index-1);
//
if (p=NULL){
return NULL;
}
//
newL->next=p->next;
p->next=newL;
return L;
}
//
bool changeValueByIndex(LNode *L,int index, int value){
if (index<0||index>getLenth(L)){
return false;
}
LNode * p=findNodeByIndex(L,index);
p->num=value;
return true;
}
// ,
LNode * delNodeByIndex(LNode *L,int index){
if (index==0){
LNode *p=L;
p=p->next;
free(L);
return p;
}
LNode * p1=findNodeByIndex(L,index-1);
if (p1==NULL||p1->next==NULL){
return NULL;
}
LNode *p2=p1->next;
p1->next=p2->next;
free(p2);
return L;
}
//
void showAllLNode(LNode *L){
LNode * lNode=L;
while(lNode){
printf("%d\t",lNode->num);
lNode=lNode->next;
}
printf("
");
}
int main(){
LNode *lNode=creatLNode();
for (int i = 0; i <10 ; i++) {
addLnode(lNode,i);
}
LNode *head=findNodeByIndex(lNode,0);
changeValueByIndex(lNode,0,-1);
lNode=delNodeByIndex(lNode,5);
showAllLNode(lNode);
return 0;
}