/*******main*******/
#include <stdio.h>
#include <stdlib.h>
#include "Linklist.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/*
张光祥 201603041032
*/
int main(int argc, char *argv[]) {
Linklist L;
Student e;
//char name[30];
int key=-1,num,i;
char num2[20];
printf("1.初始化 默认 ");
printf("2.查找 ");
printf("3.第一个与e相等的值的位置 ");
printf("4.插入 ");
printf("5.删除 ");
printf("6.长度 ");
printf("7.输出线性表 ");
printf("8.结束
");
InitList(&L);
for(int i=1;i<=2;i++){
ListInsert(&L,i,myscanf());
}
while(key){
printf("你将要:
");
scanf("%d",&num);
switch(num){
case 1:
InitList(&L);
break;
case 2:
printf("你想找第几个
");
scanf("%d",&i);
GetElem(L,i,&e);
printf("第%d个是",i);
myprintf(e);
printf("
");
break;
case 3:
printf("你想要查找的姓名为
");
scanf("%s",&num2);
if(LocateElem(L,num2)){
printf("%s位于第%d个位置
",num2,LocateElem(L,num2)) ;
}else{
printf("不存在该值
");
}
break;
case 4:
printf("插入位置是?
");
scanf("%d",&i);
printf("插入值为
");
ListInsert(&L, i, myscanf());
break;
case 5:
printf("你想删除第几个
");
scanf("%d",&i);
ListDelete(&L,i);
break;
case 6:
printf("线性表的长度是%d
",Getlength(L)) ;
break;
case 7:
ListTraverse(L);
break;
case 8:
key=0;
break;
default:
printf("输入有误
");break;
}
}
return 0;
}
/*******LinkList*******/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
学生结构体
*/
typedef struct{
char no[20];
char name[30];
int result;
}Student;
/*
格式化输入结构体
*/
Student myscanf(){
Student stu;
scanf("%s%s%d",&stu.no,&stu.name,&stu.result);
return stu;
}
/*
格式化输出结构体
*/
void myprintf(Student e){
printf("学号:%s 姓名:%s 成绩:%d",e.no,e.name,e.result);
}
/*
链表结构体
*/
typedef struct Lnode{
Student date;
struct LNode *next;
}LNode,*Linklist;
/*
链表的初始化
*/
int InitList(Linklist *L){
*L=(Linklist)malloc(sizeof(LNode));
if(!(*L))
{
return 0;
}
(*L)->next=NULL;
return 1 ;
}
/*
链表的插入
*/
int ListInsert(Linklist *L,int i,Student e)
{
int j;
Linklist p,s;
p = *L;
j = 1;
while (p && j < i)
{
p=p->next;
++j;
}
if (!p || j > i)
return 0;
s = (Linklist)malloc(sizeof(LNode));
s->date = e;
s->next = p->next;
p->next = s;
return 1;
}
/*
链表的遍历
*/
int ListTraverse(Linklist L)
{
Linklist p=L->next;
while(p)
{
myprintf(p->date);
printf("
") ;
p=p->next;
}
printf("
");
return 1;
}
/*链表的删除*/
int ListDelete(Linklist *L,int i) {
int j;
Linklist p,q;
p = *L;
j = 1;
while (p->next && j < i)
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
return 0;
q = p->next;
p->next = q->next;
free(q);
return 1;
}
/*
链表的取值
*/
int GetElem(Linklist L,int i,Student *e)
{
int j;
Linklist p;
p = L->next;
j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if ( !p || j>i )
return 0;
*e = p->date;
return 1;
}
/*链表根据姓名取值*/
int LocateElem(Linklist L,char name[])
{
int i=0;
Linklist p=L->next;
while(p)
{
i++;
if(strcmp(p->date.name,name)==0)
return i;
p=p->next;
}
return 0;
}
/*
链表长度
*/
int Getlength(Linklist L){
int j;
Linklist p;
p = L;
j = 0;
while (p->next)
{
p=p->next;
++j;
}
return j;
}