应该如何修改这个代码才能够运行成功,要求如下:建立一个带头结点的单链表,结点的值域为整型数据,要求将用户的数据按尾插入法来建立相应的单链表,我现在非常需要,能不能快速给出解决方法,注意主要要用尾插法来插入
代码运行结果如下:
代码修改如下:
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Stauts;
#define MAXSIZE 100
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
//初始化
LinkList InitList()
{
LinkList L = (LinkList)malloc(sizeof(LNode)); //修改1,LinkList是指针,sizeof(LinkList)得到的是指针的大小,不是结构体的大小
L->next = NULL;
return L;
}
//插入,尾插法
int CreateList(LinkList L,int n)
{
LNode *r,*p;
int i;
r = L;
for(i=0;i<n;i++)
{
p = (LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
return OK;
}
//3.删除
Stauts ListDelete(LinkList L,int i,ElemType *e)
{
//在带头节点的单链表中,删除第i个元素
LNode *p,*q;
int j;
p = L;j=0;
while(p->next && j<i-1)
{
p = p->next;
++j;
}
if(!p->next || j>i-1) return ERROR;
q = p->next;
*e = q->data;
p->next = q->next;
free(q);
return OK;
}
//4.遍历
Stauts TraerseList(LinkList L)
{
LNode* p= 0;
if(L ==0) return ERROR;
p = L->next;
while(p)
{
printf("%d",p->data);
p = p->next;
}
return OK;
}
int main()
{
LinkList L = NULL;
int i,choose,n;
ElemType e;
printf("请输入以下数值,选择你想要的操作:\n");
printf("1.初始化\n");
printf("2.插入\n");
printf("3.删除\n");
printf("4.遍历\n");
printf("0.退出\n");
do
{
printf("请输入你要操作的数字:\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("执行初始化操作\n");
L = InitList();
printf("初始化成功\n");
break;
case 2:
printf("请输入要插入元素的个数:");
scanf("%d",&n);
if(CreateList(L,n))
printf("插入成功\n");
else
printf("插入失败\n");
break;
case 3:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
if(ListDelete(L,i,&e))
printf("删除成功\n");
else
printf("删除失败\n");
break;
case 4:
TraerseList(L);
break;
case 0:
return 0;
}
} while (choose >=0);
return 0;
}
把代码贴出来,好给你改。
文件开头加上一句 #define _CRT_SECURE_NO_WARNING 使用scanf不会提示错误。
Status GreateList_R(LinkList L, int n)
{
if (L == NULL) return ERROR;
LNode *r, *p;
r = L;
while (r->next)
r = p->next;
p = (LinkList)malloc(sizeof(LNode));
if (p == NULL) return ERROR;
p->data = n;
p->next = NULL;
r->next = p;
return OK
}