C言語チェーンテーブル練習
4320 ワード
今日ちょうどC言语の构造体を话し终わって、数日后に试験して、复习して、Javaの学习は数日遅らせるべきで、先生はいくつかのチェーンテーブルについての练习を配置して、自分の手でコードの100行以上のコードを出して、记录して、その中のアルゴリズムはまた最适化を行うことができるべきで、しかしアルゴリズムに対して最适化して深く学习して、来学期までデータ构造を勉强したいと思って、今ただ実现することを求めます(:з」⑥)タイトル:1.チェーンテーブルaとbがあり、各ノードには学号、氏名、成績、プログラミングが含まれており、a表からb表に同じ学号があるノードを削除します.関数delでList(struct stsource,struct sttarget)実装.struct st{long num;char name[12];float socre;struct st* next}; 要求は同時に主調関数(main関数の実現)を与える2.1つのチェーンテーブルを逆順序で並べ替え、元のチェーンヘッダをチェーンヘッダとし、元のチェーンヘッダをチェーンヘッダとする.関数でinverted_List(struct st*head)実装;
注:del_List関数はヘッダポインタを操作する可能性があるので、ヘッダポインタのアドレスを入力する必要があります.したがって、形参はstruct st**sourceで、二重ポインタです.ここで先生のテーマが間違っているのではないでしょうか.
注:del_List関数はヘッダポインタを操作する可能性があるので、ヘッダポインタのアドレスを入力する必要があります.したがって、形参はstruct st**sourceで、二重ポインタです.ここで先生のテーマが間違っているのではないでしょうか.
#include
#include // malloc
struct st // typedef , _(:з」∠)_
{
long num;
char name[12];
float score;
struct st * next;
};
void main()
{
void creat_LinkList(struct st** Head,int n );
void print_LinkList(struct st* Head );
struct st * del_list (struct st **source,struct st* target);
struct st* inverted_list(struct st*head);
struct st* firstList = NULL,*secondList =NULL; // ,
creat_LinkList(&firstList,3);
creat_LinkList(&secondList,2);
//print_LinkList(firstList);
//print_LinkList(secondList);
del_list(&firstList,secondList);
print_LinkList(firstList);
printf("--------------------------");
firstList = inverted_list(firstList);
print_LinkList(firstList);
}
void creat_LinkList(struct st** Head,int n ) // n , head ,
{
struct st *p ;
p = (struct st*)malloc(sizeof(struct st));
void print_LinkList(struct st* Head );
*Head = p;
printf(" 1 , ,
");
scanf("%d%s%f",&(p->num),&(p->name),&(p->score));
for (int i = 2;i <= n;i++)
{
p->next = (struct st*)malloc(sizeof(struct st));
p = p->next;
printf(" %d , ,
",i);
scanf("%d%s%f",&(p->num),&(p->name),&(p->score));
}
p->next =NULL;
}
void print_LinkList(struct st* Head ) // ,
{
struct st* p;
p=Head;
while (p)
{
printf(" :%d, :%s, :%f
",p->num,p->name,p->score);
p = p->next;
}
}
// ,p ,p1 2 , 2: p->next->next ,
// 2
struct st * del_list (struct st **source,struct st* target)
{
struct st *p1,*p2,*p,*temp; //p1 ,p p1 ,
int tag;
p1 = *source;
p = p1;
while (p1)
{
p2 = target;
tag = 0; //
while (p2)
{
if (p1->num == p2->num) //
{
if (p1 == *source)
{
*source = p1->next;
free(p1);
p1 = *source;
p = p1;
tag = 1;
}
else
{
p->next = p1->next;
temp = p1;
p1 = temp->next;
free(temp);
tag = 1; // , p , p1
break;
}
}
p2 = p2->next;
}
if (tag == 0) // , p p1
{ p = p1; //p p1
p1 = p1->next;
}
}
}
struct st* inverted_list(struct st*head) //
{
struct st *first,*p1,*p2,*p3;
if (head==NULL)
return head;
else
{
first=head; //
p1=head;
p2=p1->next;
while (p2)
{
p3=p2->next; //p3 p2 , p2
p2->next=p1; // p1 p2
p1=p2; // p1,p2,p3 ,
p2=p3;
}
head=p1;
first->next=NULL;
return head;
}
}