使用C语言带有单链表编写一个管理系统

要求:
可以对数据进行增删改查
可以进行排序
最好可以标记出每一块代码的意思

参考一下吧!
#include<stdlib.h>
#include<stdio.h>
typedef struct LNode{
int num;
struct LNode *next;
}LNode,*linklist;
void Insertlist(linklist &L,int e) /*L为已知有序递增链表,在L的适当位置插入p,使得L保持有序性*/
{
linklist p1,q,p2;
p1=(linklist)malloc(sizeof(LNode));
p1->num=e;
if(L->next) /*判断链表L是否为空链表*/
{
q=L->next;/*将L第一个元素地址给q*/
p2=L;
while(q->next&&q->num<p1->num)/*若q不是最后一个节点,且q的值小于p的值则q后移一位*/
{ p2=q;
q=q->next;
}
if(q->num>=p1->num) /*查找插入位置*/
{ p1->next=q;
p2->next=p1;
}
else
{ q->next=p1;
p1->next=NULL;
} /*插入节点*/
}
else
{ L->next=p1;
p1->next=NULL;
}
}

void createlist(linklist &L)/*创建带头结点的有序链表*/
{ int i,m,k;
L=(linklist)malloc(sizeof(LNode));
L->next=NULL;
printf("请输入链表的长度:");
scanf("%d",&m);
printf("请输入数据: "); /*建立一个带头节点单链表*/
for(i=0;i<m;i++)
{ scanf("%d",&k); /*输入数据*/
Insertlist(L,k); /*调用插入函数,将新生成的节点插入链表中*/
}
printf("\n");
}
void turnback(linklist &L) /*链表的逆置*/
{
linklist p,q;
p=L->next; /*p指向第一个元素*/
L->next=NULL;
while(p)
{
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}

void mergelist(linklist &L1,linklist L2) /*合并L1,L2两个链表,用的地址L1作为新链表地址返回*/
{ linklist p1,p2,p3,p4;
p1=L1->next;
p2=L2->next;
p3=L1;
while(p1&&p2)
{ if(p1->num<=p2->num) /*若p1的值小于或等于p2的值,则帕p1\p3同时后移*/
{ p3=p1;
p1=p1->next;
}
else /*若p1的值大于p2的值,则p1前插入p2,p2和p3后移*/
{ p4=p2->next;
p2->next=p1;
p3->next=p2;
p3=p2;
p2=p4;
}
}
p3->next=p1?p1:p2; /*插入剩余段*/
free(L2); /*释放L2的头节点*/
}
void printlist(linklist L) /*打印已知链表*/
{ linklist p;
p=L->next;
while(p)
{ printf("%5d",p->num); /*输出数据*/
p=p->next;
}
printf("\n");
}

void main(){
linklist L1,L2;
printf("创建有序链表L1\n");
createlist(L1);
printf("单链表L1为:");
printlist(L1);
printf("创建有序链表L2:\n");
createlist(L2);
printf("L2链表为:");
printlist(L2);
mergelist(L1,L2); //调用合并两个链表的函数
printf("合并两个单链表后新的链表为:\nnum score\n");
printlist(L1);
printf("递减排序:");
turnback(L1);
printlist(L1);
}追问

额·······是创建管理系统额

追答

我错了,不好意思!

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网