用C语言编程,数据结构题 要快!答的好再加更多悬赏
发布网友
发布时间:2022-05-22 01:23
我来回答
共1个回答
热心网友
时间:2023-11-24 04:25
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
ElemType date;
struct LNode *next;
}linklist,*link;
/*构造链表*//////////////////////////////////////
void IinitList(link &L)
{
if(L)delete L;
L= (link)malloc(sizeof(LNode)) ;
if (!L) exit(1);
L->next=NULL;
printf("链表已经建立\n");
}
//////////////////////////////////////////////////////
// /*删除结点*/// //////////////////////////////////////////////
int listdelete(link &L,int i,ElemType &e)
{
link p,q; int j;
p=L;j=0;
while(p->next&&j<i-1)
{
p=p->next;++j;
}
q=p->next;
p->next=q->next;
e=q->date;free(q);
printf("结点已经删除\n");
return 1;
}
////////////////////////////////////////////// /////////
// /*插入结点*/////////////// ///////////////////////
int listinsert(link &L,int i,ElemType e)
{
link p,q;
int j;
p=L;j=0;
while(p&&j<i-1)
{
p=p->next;++j;
}
q= (link)malloc(sizeof(LNode));
q->date=e;
q->next=p->next;
p->next=q;
return 1;
}
/////////////////////////////////////////////////////
////*显示数据*///////// ////////////////////////////////
void show(link l)
{ link p; int j;
p=l;j=0;
printf("链表的值为:\n");
while(p->next)
{
printf("%d\n",p->next->date);
p=p->next;
}
}
//////////////////////// /////////////////////////////////
//////销毁链表////// ////////////////////////////////////////
void destorylinst(link &L)
{
while(L)
{ link p=L;
L=L->next;
free(p) ;
}
L=NULL;
}
////// 打印表头///////////////////////////////////////
void print()
{
printf("------------------------\n");
printf("------------------------\n");
}
void putline(link &l)
{
if(l==NULL ||l->next==NULL )
printf("链表未建立或是空的,请先构造链表\n" );
else{
link p,q;
p=l->next;
while(p!=NULL)
{ q=p->next;
while(q!=NULL)
{
if(p->date>q->date)
{ ElemType t;
t=p->date;
p->date=q->date;
q->date=t; }
q=q->next;
} p=p->next;
} printf("链表已经排序 \n");
}
}
//////测试函数///// /////////////////////
void main()
{ link L=NULL; int k;
while(1)
{
printf("按0退出\n按1建立链表\n按2插入结点\n按3删除结点\n按4清空链表\n") ;
print();
int a,i,j;
scanf("%d",&a);
switch(a)
{ case 0: if(L!=NULL)
destorylinst(L) ;
exit(1);
case 1:
IinitList(L);
k=0;
printf("链表长度为:%d \n",k);
print();
printf("请输入值,输入0 结束\n");
int bb;
scanf("%d",&bb);
while(bb!=0)
{ k++;
listinsert(L,k,bb) ;
scanf("%d",&bb);
} printf("结点已经插入\n");
print(); putline(L);
show(L) ; printf("链表长度为:%d \n",k);
print();break;
case 2:
if(L!=NULL)
{
printf("输入植;\n");
scanf("%d",&j);
listinsert(L,0,j) ; putline(L);
k++;
print();
show(L);
printf("链表长度为:%d\n",k);
print();
}else
{ printf("链表不存在,请先建链表\n");
print(); }break;
case 3:
if(L!=NULL)
{
printf("输入位置:\n");
scanf("%d",&i);
while(i>k || i<1)
{
printf("位置错误,重新输入删除位置\n") ;
scanf("%d",&i);
}
listdelete (L,i,j);
printf("你删除的是:\n");
printf("%d\n",j) ;
k--; print();
show(L);
printf("链表长度为:%d\n",k);
print();
}
else {
printf("链表不存在,请先建链表\n");
print();
} break;
case 4:
destorylinst(L) ;
printf("链表已经清空\n");
print();break;
}
}
delete L;
}