第一次尝试用C语言写数据结构,太多的不懂的,也借鉴过别人的。
但是在print list那部分出现l->next会出现OFx的报错,我不知道是不是前面的部分有问题还是别的什么。
求解答,谢谢大家
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
typedef int Elemtype;
typedef struct node
{
Elemtype date;
struct node* next;
}LinkList;
void InitListLink(LinkList L)
{
L = (LinkList)malloc(sizeof(LinkList));
L->next = NULL;
}
void CreateFromHead(LinkList L)
{
LinkList p; //新建一个结点指针 ,永远指向当前链表的头结点
int i;
printf("请输入num,输入-1结束。");
scanf_s("%d", &i); //输入i,用于指代输入的整数,将要放进链表的数据元素,也用来控制while循环,当我输入i的值为-1时结束。
while (i != -1)
{
p = (LinkList)malloc(sizeof(LinkList*));//新建一个结点
p->date = i;
p->next = L->next;
L->next = p;
scanf_s("%d", &i);
}
}
void InsertList(LinkList L, int i, Elemtype e)//给定插入位置为i,进行插入操作
{
LinkList pre;
pre = (LinkList)malloc(sizeof(LinkList*));
pre= L;
int k = 0;
while (pre != NULL && k < i - 1)
{
pre = pre->next;
k++;
}
if (pre == NULL)
{
printf("插入失败!");
}
LinkList p;
p = (LinkList)malloc(sizeof(LinkList*));
p->date = e;
p->next = pre->next;
pre->next = p;
printf("插入成功!");
}
void DeleteList(LinkList* L, int i)//给定删除位置为i,进行删除操作
{
LinkList s;
s = (LinkList)malloc(sizeof(LinkList*));
int j = 0;
s = L;
while (s->next != NULL && (j < i - 1))
{
s = s->next;
j++;
if (s->next==NULL)
{
break;
}
}
if (s->next == NULL)
{
printf("删除失败!");
}
LinkList r;
r = (LinkList)malloc(sizeof(LinkList*));
r = s->next;
LinkList q = s->next;
s->next = q->next;
free(r);
printf("删除成功!");
}
void printlist(LinkList L) //对单链表进行打印
{
printf("该链表的内容为:");
while (L->next != NULL)
{
if(L->next)
printf("%d ", L->next->date);
L = L->next;
}
printf("\n");
}
int main()
{
LinkList L1=NULL;
L1 = (LinkList)malloc(sizeof(LinkList*));
InitListLink(L1);
CreateFromHead(L1);
printf("该链表为:");
printlist(L1);
InsertList(L1, 3, 0);
printf("添加过后为:");
printlist(L1);
DeleteList(L1, 2);
printf("删除过后为:");
printlist(L1);
return 0;
}
你可以参考下我博客中的单链表操作,有一篇博客中的图片比较多,可以看看,希望帮到你。