学链表自己随便编了一个学生成绩管理的小程序,比较粗糙,排序功能目前还没有实现~
#include <stdio.h>
#include <stdlib.h>
typedef struct nodeList{
char name[20];
int score;
struct nodeList *next;
}NODE;
NODE *InitList(NODE *head){
head = (NODE *)malloc(sizeof(NODE));
head->next = NULL;
return head;
}
NODE *CreatList(NODE *head,int n){
NODE *p,*tail;
tail = head;
int i = n;
while(0!=i){
p = (NODE *)malloc(sizeof(NODE));
printf("请输入学生姓名:");
scanf("%s",&p->name);
printf("请输入学生的分数:");
scanf("%d",&p->score);
p->next = NULL;
tail->next = p;
tail = p;
i-=1;
}
return head;
}
void OutputList(NODE *head){
NODE *p = head;
while(p!=NULL){
printf("姓名:%s | 成绩:%3d\n",p->name,p->score);
p = p->next;
}
}
NODE *DeleteList (NODE *head,int Position){ //删除链表中的元素
NODE *p,*q;
int i;
p = head->next;
for (i = 1;i<Position-1&&p!=NULL;i++){
p= p->next; //定位
}
q = p->next;
p->next = q->next;
free(q);
return head;
}
NODE *AddList(NODE *head){
NODE *p,*q;
q = head;
p = (NODE *)malloc(sizeof(NODE));
printf("请输入新转来的同学的姓名:");
scanf("%s",&p->name);
printf("请输入成绩:");
scanf("%d",&p->score);
while(q->next!=NULL){
q=q->next;
}
p->next = NULL;
q->next = p;
return head;
}
int LENGTHLIST(NODE *head){
NODE *p; int length = 0;
p = head->next;
while(p!=NULL){
p= p->next;
length++;
}
return length;
}
}
main(){
NODE *head;
int studentNUMber = 0;
printf("请输入学生人数:");
scanf("%d",&studentNUMber);
head = InitList(head);
head = CreatList(head,studentNUMber);
printf("\n---------这是分割线~~~-------------\n");
OutputList(head->next);
printf("\n-------删除一名坏学生,小公鸡点到谁就是谁!--------\n");
head = DeleteList(head,2);
OutputList(head->next);
printf("\n------这里转来了一名新同学!-----\n");
head = AddList(head);
OutputList(head->next);
// printf("LENGTH =%d",LENGTHLIST(head));
//
// printf("\n------排个序吧!----------------------------\n");
// head = OrderList(head);
// OutputList(head);
return 0;
}