c语言用线性表作成绩排序系统,利用线性表的顺序存储结构完成一个班级的所有课程的管理c语言要求实现增加,删除,修改学生成绩记录等功...

满意答案

#include

#include

typedef struct LNode{

int data;//链表数据

struct LNode* next;//链表指针

}LNode,*LinkList;

/*头插法-建立单链表*/

LinkList HeadCreate(LinkList la)

{

int num;

la=(LinkList)malloc(sizeof(LNode));//建立头结点

la->next=NULL;

scanf("%d",&num);

while(num!=10)

{

LNode *p=(LinkList)malloc(sizeof(LNode));

p->data=num;

p->next=la->next;

la->next=p;

scanf("%d",&num);

}

return la;

}

/*尾插法-建立单链表*/

LinkList TailCreate(LinkList la)

{

int num;

la=(LinkList)malloc(sizeof(LNode));

la->next=NULL;

LinkList s,r=la;

scanf("%d",&num);

while(num!=10)

{

s=(LinkList)malloc(sizeof(LNode));

s->data=num;

r->next=s;

r=s;

scanf("%d",num);

}

r->next=NULL;

return la;

}

/*单链表遍历*/

void TravelList(LinkList la)

{

LinkList p=la->next;

while(p!=NULL)

{

printf("%d->",p->data);

p=p->next;

}

printf("\n");

}

/*单链表的按位查找*/

LinkList GetElem(LinkList la,int i)

{

int j=1;

LNode* p=la->next;

if(i<1)

return NULL;

while(p && j

{

p=p->next;

j++;

}

return p;

}

/*单链表的按值查找*/

LinkList LocalElem(LinkList la,int e)

{

LNode* p=la->next;

while(p!=NULL && p->data!=e)

p=p->next;

return p;

}

/*单链表插入操作*/

bool InsertList(LinkList la,int i,int e)

{

//在la链表中的i位置插入数值e

int j=1;

LinkList p=la,s;

while(p && j

{

p=p->next;

j++;

}

if(p==NULL)

return false;

if((s=(LinkList)malloc(sizeof(LNode)))==NULL)

return false;

s->data=e;

s->next=p->next;

p->next=s;

return true;

}

/*单链表删除操作*/

bool DeleteList(LinkList la,int i)

{

int j=1;

LinkList p=la,q;

while(p && j

{

p=p->next;

j++;

}

if(p==NULL || p->next==NULL)//表示不存在第i-1个和第i的元素

return false;

q=p->next;

p->next=q->next;

free(q);

return true;

}

/*单链表的表长*/

int LengthList(LinkList la)

{

int nLen=0;

LinkList p=la->next;

while(p)

{

p=p->next;

nLen++;

}

return nLen;

}

/*单链表逆置*/

LinkList Reserve(LinkList la)

{

if(la==NULL || la->next==NULL)

return la;

LinkList p=la->next,q=p->next,r=q->next;

la->next=NULL;

p->next=NULL;

while(r!=NULL)

{

q->next=p;

p=q;

q=r;

r=r->next;

}

q->next=p;

la->next=q;

return la;

}

int main()

{

LNode la;

LinkList p;

p=HeadCreate(&la);//头插法创建单链表

TravelList(p);

printf("%p\n",GetElem(p,1));//获得第1个结点地址

InsertList(p,2,10);//在链表的第2个位置插入元素10

TravelList(p);

DeleteList(p,3);//删除链表的第3个元素

TravelList(p);

printf("%d\n",LengthList(p));//获得链表长度

p=Reserve(p);

TravelList(p);

return 0;

}

//运行结果

//5 6 12 7 8 14 9 3 2 5 14 10头插法创建链表

//14->5->2->3->9->14->8->7->12->6->5->显示链表

//00382490第一个结点的地址

//14->10->5->2->3->9->14->8->7->12->6->5->插入元素值为10的结点

//14->10->2->3->9->14->8->7->12->6->5->删除第三个结点

//11获得链表长度

//5->6->12->7->8->14->9->3->2->10->14->链表逆置

//Press any key to continue

这是我写的一个线性表链式存储的综合程序,包含了你所要的创建、删除、插入、按值查找的功能,还有一些额外的功能。下面加注释的是程序运行结果,你可以参考试着改改程序,让程序更加完美。希望对你有帮助,呵呵!

00分享举报

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值