主题:大家帮看看一起学习
#include"stdio.h"
#include"malloc.h"
#define ERROR -1
#define OK 1
#define NULL 0
typedef int status;
typedef int LElemType;
typedef struct LNode { LElemType elem;
struct LNode *next;
}LNode,*LinkList;
status CreatLinkList(LinkList L,int n) /*创建带头结点的单链表*/
{ int i,j;
LNode *p,*q;
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL){printf("out of space");return ERROR;}
L->next=NULL;
q=L; /* 不要用L 去叠代,那样怎么返回链表呢?*/
for(i=n,j=1;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
if(p==NULL){printf("out of space");return ERROR;}
printf("\n**********请输入第%d个元素********\n",j) ;
scanf("%d",&(p->elem));
p->next=q->next;
q->next=p;
q=p,j++; }
return 0;
}
status DeleteLinkList(LinkList L,int i) /*删除单链表中的元素*/
{
LNode *p,*q;int j=1;
p=L->next ;
while(p&&j<i-1)
{ p=p->next;j++;}
if(!p&&(j=i-1))
return ERROR;
q=p->next;
p->next=q->next;
free(q);
return 0;
}
status IinkListInsert(LinkList L,int i,LElemType e) /*插入元素*/
{
LNode *p,*q,*s;int j;
p=L->next;j=1;
s=(LinkList)malloc(sizeof(LNode));
if(s==NULL){printf("out of space"); return ERROR;}
while(p&&j<i-1)
p=p->next;
if(!p)
return ERROR;
s->next=p->next;
p->next=s;
s->elem=e;
return 0;
}
status Delete_head (LinkList L) /*删除头元素*/
{ LinkList p;
p=L->next;
if(p!=NULL)
{ L->next=p->next;
free(p);}
else return 0;
}
status Delete_tail(LinkList L) /*删除尾元素*/
{ LinkList p,q;
p=L->next;
while(p->next->next)
p=p->next;
q=p->next;
p->next=NULL;
free(q);
return 0;
}
void output(LinkList head)
{
LinkList p;
p=head->next;
do
{
printf("%8d",p->elem);
p=p->next;
}
while(p!=NULL);
}
main()
{
LinkList L;
int n,i,e;
printf("请输入你要输入单链中元素的个数");
scanf("%d",&n);
CreatLinkList(L, n);
output( L) ;
printf("\n********************************请输入需要删除元素的位置:");
scanf("%d", &i);
DeleteLinkList(L, i) ;
output( L) ;
printf("\n********************************请输入需要插入元素的位置和值:");
scanf("%d%d",&i,&e);
IinkListInsert(L, i, e) ;
output( L) ;
printf("\n********************************删除头元素的操作********************************\n");
Delete_head ( L);
output( L);
printf("\n********************************删除尾元素的操作********************************\n");
Delete_tail( L);
output( L);
printf("\n********************************请按任意键退出**********************************\n");
system("pause");
}
本程序可以运行 但是当输入几个值后 输出结果一直为0 不知道怎么回事 我现在正在改
如果改好了 就告诉大家一声 如果有谁发现了错误 麻烦给我一点点提示 谢谢
#include"malloc.h"
#define ERROR -1
#define OK 1
#define NULL 0
typedef int status;
typedef int LElemType;
typedef struct LNode { LElemType elem;
struct LNode *next;
}LNode,*LinkList;
status CreatLinkList(LinkList L,int n) /*创建带头结点的单链表*/
{ int i,j;
LNode *p,*q;
L=(LinkList)malloc(sizeof(LNode));
if(L==NULL){printf("out of space");return ERROR;}
L->next=NULL;
q=L; /* 不要用L 去叠代,那样怎么返回链表呢?*/
for(i=n,j=1;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
if(p==NULL){printf("out of space");return ERROR;}
printf("\n**********请输入第%d个元素********\n",j) ;
scanf("%d",&(p->elem));
p->next=q->next;
q->next=p;
q=p,j++; }
return 0;
}
status DeleteLinkList(LinkList L,int i) /*删除单链表中的元素*/
{
LNode *p,*q;int j=1;
p=L->next ;
while(p&&j<i-1)
{ p=p->next;j++;}
if(!p&&(j=i-1))
return ERROR;
q=p->next;
p->next=q->next;
free(q);
return 0;
}
status IinkListInsert(LinkList L,int i,LElemType e) /*插入元素*/
{
LNode *p,*q,*s;int j;
p=L->next;j=1;
s=(LinkList)malloc(sizeof(LNode));
if(s==NULL){printf("out of space"); return ERROR;}
while(p&&j<i-1)
p=p->next;
if(!p)
return ERROR;
s->next=p->next;
p->next=s;
s->elem=e;
return 0;
}
status Delete_head (LinkList L) /*删除头元素*/
{ LinkList p;
p=L->next;
if(p!=NULL)
{ L->next=p->next;
free(p);}
else return 0;
}
status Delete_tail(LinkList L) /*删除尾元素*/
{ LinkList p,q;
p=L->next;
while(p->next->next)
p=p->next;
q=p->next;
p->next=NULL;
free(q);
return 0;
}
void output(LinkList head)
{
LinkList p;
p=head->next;
do
{
printf("%8d",p->elem);
p=p->next;
}
while(p!=NULL);
}
main()
{
LinkList L;
int n,i,e;
printf("请输入你要输入单链中元素的个数");
scanf("%d",&n);
CreatLinkList(L, n);
output( L) ;
printf("\n********************************请输入需要删除元素的位置:");
scanf("%d", &i);
DeleteLinkList(L, i) ;
output( L) ;
printf("\n********************************请输入需要插入元素的位置和值:");
scanf("%d%d",&i,&e);
IinkListInsert(L, i, e) ;
output( L) ;
printf("\n********************************删除头元素的操作********************************\n");
Delete_head ( L);
output( L);
printf("\n********************************删除尾元素的操作********************************\n");
Delete_tail( L);
output( L);
printf("\n********************************请按任意键退出**********************************\n");
system("pause");
}
本程序可以运行 但是当输入几个值后 输出结果一直为0 不知道怎么回事 我现在正在改
如果改好了 就告诉大家一声 如果有谁发现了错误 麻烦给我一点点提示 谢谢