?? linklist.txt
字號:
/*2005-03-02 -----------------------------------------------------------
題目要求:
用單鏈表實現如下內容:建立有多個學生的成績檔案(以學號為0為結束標志),
每個學生包括學號、成績,并實現新成員的加如和舊成員的刪除。
--------------------------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
typedef struct student //單鏈表的存儲結構
{
long num;
float score;
struct student* next;
}LINK;
int n; //定義一個全局變量(鏈表的結點個數)
LINK* Create() //建立
{
LINK* head;
LINK* p1,*p2;
n=0;
p1=p2=(LINK*)malloc(sizeof(LINK));
scanf("%ld,%f",&p1->num,&p1->score);
head=NULL;
while(p1->num !=0)
{
n=n+1;
if(n==1)
head=p1;
else //p1指向新開的結點,p2指向鏈表中的最后一個結點
p2->next=p1; //把p1所指的結點連在p2所指結點的后面
p2=p1; //p2指向鏈表中的最后一個結點
p1=(LINK*)malloc(sizeof(LINK));
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
return head;
}
LINK* Insert(LINK *head,LINK *stud) //插入
{
LINK *p0,*p1,*p2;
p1=head; //p1指向第一個結點
p0=stud; //p0指向待插入的結點
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else
{
while((p0->num > p1->num) && (p1->next !=NULL))
{
p2=p1; //p2指向p1剛才所指的結點
p1=p1->next;
}
if(p0->num < p1->num)
{
if(head==p1) head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
return head;
}
LINK* Delete(LINK*head,long num) //刪除
{
LINK *p1,*p2;
if(head==NULL)
{
printf("鏈表為空!\n\n");
return(head);
}
p1=head; // p1指向第一個結點
while(num !=p1->num && p1->next !=NULL) //如果要刪除的不是第一個接點,
{
p2=p1; //將p1賦給p2,使p2指向剛才檢查過的結點
p1=p1->next; //p1指向下一個結點
}
if(num==p1->num) //如果刪除的是第一個結點
{
if(p1==head)
head=p1->next; //head指向原來的第2個結點
else
p2->next=p1->next;
printf("刪除了:%ld",num);
n=n-1;
}
else
printf("沒有找到%ld",num);
return(head);
}
void print(LINK *head) //輸出
{
LINK* p;
printf("現在鏈表中的%d個記錄是:\n",n);
p=head;
if(head !=NULL)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
void main()
{
printf("\n---------------------單鏈表的操作--------------------------\n\n");
LINK *head,*stu;
long Delete_num;
printf("請輸入記錄(學號,成績),輸入學號為0則結束:\n");
head=Create(); //建立操作
print(head);
printf("請輸入要插入的記錄:\n"); //插入操作
stu=(LINK*)malloc(sizeof(LINK));
scanf("%ld,%f",&stu->num,&stu->score);
while(stu->num !=0)
{
head=Insert(head,stu);
print(head);
printf("請輸入要插入的記錄:\n");
stu=(LINK*)malloc(sizeof(LINK));
scanf("%ld,%f",&stu->num,&stu->score);
}
printf("請輸入要刪除的數據:\n"); //刪除操作
scanf("%ld",&Delete_num);
while(Delete_num !=0)
{
head=Delete(head,Delete_num);
print(head);
printf("請輸入要刪除的數據:\n");
scanf("%ld",&Delete_num);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -