关于链表与结构体:
#include<stdio.h>
#include<stdlib.h>
struct stu
{
struct stu *p,*q,*head,*rear;
int num;
int score;
struct stu *next;
};
struct stu *create() //建立链表
{
struct stu *p,*q,*head,*rear;
head=rear=NULL;
int l,n,m;
while(1){
printf("请输入学号:");
scanf("%d",&n);
if(n<0) break;
else{
p=(struct stu*)malloc(sizeof(struct stu));
p->num=n;
printf("请输入成绩:");
scanf("%d",&p->score);
if(rear==NULL){
head=p;
p->next=NULL;
rear=p;
}else {
p->next=rear->next;
rear->next=p;
rear=p;
}
}
}
return head;
}
void output (struct stu *head){ // 遍历链表
struct stu *p;
p=head;
while(p!=NULL){
printf("\nnum=%d\tscore=%d",p->num,p->score);
p=p->next;
}
}
struct stu *insert(struct stu *head,struct stu *pTemp) //插入链表
{
struct stu *p,*q;
q=NULL;p=head;
while(p!=NULL&&pTemp->num>p->num){
q=p;
p=p->next;
}
if(p==head)
{
pTemp->next=p;
head=pTemp;
}
else{
pTemp->next=p;
q->next=pTemp;
}
return head;
}
struct stu *deleted(struct stu *head,int n) //删除链表结点
{
struct stu *p,*q;
q=NULL;p=head;
while(n!=p->num&&p->next=NULL){
q=p;
p=p->next;
}
if(n==p->num){
if(p==head){
head=p->next;
free(p);
}else{
q->next=p->next;
free(p);
}
}else printf("\nIt's not found");
return head;
}
int main()
{
struct stu *head,*p,*q;
head=create(); //建立链表
output(head); //输出链表
p=(struct stu*)malloc(sizeof(struct stu));
scanf("%d",p->num);
scanf("%d",p->score);
head=insert(head,p); //插入结点
scanf("%d",n)
deleted(head,n); //删除结点
output(head);
return 0;
}
总结:
1、注意两个函数:gets()与puts(),前者读取一行字符串,空格不能停止,碰见回车才停止。后者正常输出,但后面自动回车。
2、以后浮点数输入输出尽量用double,回避float。