链表

/*******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;




 

原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232664.html