1.0尾插法
#include<stdio.h>
#include<stdlib.h>
struct Student
{
int num;
float score;
struct Student* next;
};
int n;
struct Student *create(void)
{
struct Student* head;
struct Student* p1, * p2;
n = 0;
p1 = p2 = (struct Student*)malloc(sizeof(struct Student));
scanf("%d,%f", &p1->num, &p1->score);
head = NULL;
while (p1->num != 0)
{
n += 1;
if (n == 1)
{
head = p1;
}
else p2->next = p1;
p2 = p1;
p1 = (struct Student*)malloc(sizeof(struct Student));
scanf("%d,%f", &p1->num, &p1->score);
}
p2->next = NULL;
return(head);
}
void print(struct Student *head)
{
struct Student* p;
printf("have %d records\n", n);
p = head;
if (head!=NULL)
{
do
{
printf("%d,%5.1f\n", p->num, p->score);
p = p->next;
} while(p!=NULL);
}
}
int main()
{
struct Student* pt;
pt = create();
print(pt);
return 0;
}
2.0头插法
#include<stdio.h>
#include<stdlib.h>
struct Book
{
char title[100];
char anthor[100];
struct Book* next;
};
void input(struct Book* book)
{
printf("title:");
scanf("%s", book->title);
printf("anthor:");
scanf("%s", book->anthor);
}
void addbook(struct Book** head)
{
struct Book* book,*temp;
book = (struct Book *)malloc(sizeof(struct Book));
if (book == NULL)
{
printf("defeat");
exit(1);
}
input(book);
if (*head != NULL)
{
temp = *head;
*head = book;
book->next = temp;
}
else
{
*head=book;
book->next = NULL;
}
}
void print(struct Book* head)
{
struct Book* book;
int count = 1;
book = head;
while (book != NULL)
{
printf("NO. %d\n", count);
printf("title:%s ", book->title);
printf("anthor:%s \n", book->anthor);
book = book->next;
count++;
}
}
void re(struct Book* head)
{
while (head != NULL)
{
head = head->next;
free(head);
}
}
int main()
{
struct Book* head=NULL;
int ch;
while (1)
{printf("是否需添加");
do {
ch = getchar();
} while (ch != 'y' && ch != 'n');
if (ch == 'y')
{
addbook(&head);
}
else
break;
}
printf("是否需打印");
do {
ch = getchar();
} while (ch != 'y' && ch != 'n');
if (ch == 'y')
{
print(head);
}
re(head);
return 0;
}