翁カイC言語進級、チェーンテーブルの学習ノート(一)
チェーンテーブルの学習教室リンク
https://www.icourse163.org/learn/ZJU-200001?tid=1207389210#/learn/content?type=detail&id=1212809729&cid=1216239425
1,チェーンテーブルの作成
2、それを関数にカプセル化する
4、再改善の利点:私たちが定義したデータリストを使って、チェーンテーブル全体を代表して、後で修正するのに便利です.eg:チェーンテーブルストレージが常に最初のビットから検索される必要がなく、最後のビットから直接格納されるように、データを定義できます.
5、4の例を実現する
チェーンテーブルの学習(二)
https://www.icourse163.org/learn/ZJU-200001?tid=1207389210#/learn/content?type=detail&id=1212809729&cid=1216239425
1,チェーンテーブルの作成
#include
#include
#include "node.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct _node{
int value;
struct _node *next;
}Node;
Node* add(Node *head,int number);
int main(int argc, char *argv[])
{
Node *head=NULL;//
int number;
do{
scanf("%d",&number);
if(number!=-1){
//add to linked-list
Node *p=(Node*)malloc(sizeof(Node));
p->value=number;
p->next=NULL;
find the last
Node *last=head;
if(last){
while(last->next){
// last->next=NULL ,
last=last->next;
}
last->next=p;
}else{
head=p;
}
}
}while(number!=-1);
printf("%d",head->value);// ,
return 0;
}
2、それを関数にカプセル化する
#include
#include
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct _node{
int value;
struct _node *next;
}Node;
Node* add(Node *head,int number);
int main(int argc, char *argv[])
{
Node *head=NULL;
int number;
do{
scanf("%d",&number);
if(number!=-1){
head=add(head,number);
}
}while(number!=-1);
printf("%d",head->value);
return 0;
}
Node* add(Node *head,int number)
{
Node *p=(Node*)malloc(sizeof(Node));
p->value=number;
p->next=NULL;
Node *last=head;
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
head=p;
}
return head;// : 3、void add(Node **head,int number)
}
4、再改善の利点:私たちが定義したデータリストを使って、チェーンテーブル全体を代表して、後で修正するのに便利です.eg:チェーンテーブルストレージが常に最初のビットから検索される必要がなく、最後のビットから直接格納されるように、データを定義できます.
#include
#include
typedef struct _node{
int value;
struct _node *next;
}Node;
typedef struct _list{
Node* head;
}List;
void * add(List *list,int number);
int main(int argc, char *argv[])
{
List list;
list.head=NULL;
int number;
do{
scanf("%d",&number);
if(number!=-1){
add(&list,number);
}
}while(number!=-1);
printf("%d",list.head->value);
return 0;
}
void * add(List *list,int number)
{
Node *p=(Node*)malloc(sizeof(Node));
p->value=number;
p->next=NULL;
//find the last
Node *last=list->head;
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
list->head=p;
}
}
5、4の例を実現する
#include
#include
#include "node.h"
typedef struct _list{
Node* head;
Node* tail;
}List;
void * add(List *list,int number);
int main(int argc, char *argv[])
{
List list;
list.head=NULL;
list.tail=NULL;
int number;
do{
scanf("%d",&number);
if(number!=-1){
add(&list,number);
// head=add(head,number);
}
}while(number!=-1);
printf("%d",list.tail->value);
return 0;
}
void * add(List *plist,int number)
{
Node *p=(Node*)malloc(sizeof(Node));
p->value=number;
p->next=NULL;
//find the last
Node *last=plist->tail;
if(last){
// while(last->next){
// last=last->next;
// }
last->next=p;
plist->tail=p;
}else{
plist->head=p;
plist->tail=p;
}
}
チェーンテーブルの学習(二)