c语言链表报错,【debug】c语言链表运行报错

[C++] 纯文本查看 复制代码#include

#include

typedef char elemtype;

typedef struct _Node

{

elemtype data;

_Node *next;

} Node, *List;

// (1)初始化顺序表L

Node *initList();

// (2)依次插入a、b、c、d、e

bool insertNode(List &L, elemtype data, int i);

// (3)输出顺序表L

void printList(List L);

// (4)输出顺序表L的长度

int length(List L);

// (5)判断顺序表L是否为空

bool isEmpty(List L);

// (6)输出顺序表的第3个元素

// (7)输出元素a的逻辑位置

bool getElem(List L, int i, elemtype &e);

// (10)删除L的第3个元素

bool getLogicElem(List L, elemtype e, int &i);

bool delElem(List L, int i);

// (12)释放顺序表L

bool destroyList(List L);

int main()

{

// (1)初始化顺序表L

// List L = initList();

List L = (Node *)malloc(sizeof(Node));

// (2)依次插入a、b、c、d、e

char datalist[5] = {'a', 'b', 'c', 'd', 'e'};

for (int i = 0; i < 5; i++)

{

char *t = &datalist[i];

printf("%c", *t);

insertNode(L, datalist[i], i + 1);

}

// (3)输出顺序表L

printList(L);

// (4)输出顺序表L的长度

printf("length of List L is %d", length(L));

// (5)判断顺序表L是否为空

// char *str = isEmpty(L) ? "empty" : "no empty";

if (isEmpty(L))

printf("List L is empty");

else

printf("List L is no empty");

// (6)输出顺序表的第3个元素

char e = getElem(L, 3, e);

printf("%c\n", e);

// (7)输出元素a的逻辑位置

int i = 0;

getLogicElem(L, 'a', i);

printf("a in the %d", i);

// (8)在第4个元素位置上插入元素f

insertNode(L, 'f', 4);

//(9)输出顺序表L

printList(L);

// (10)删除L的第3个元素

delElem(L, 3);

// (11)输出顺序表L

printList(L);

// (12)释放顺序表L

destroyList(L);

return 0;

}

Node *initList()

{

return (Node *)malloc(sizeof(Node));

}

bool insertNode(List &L, elemtype data, int i)

{ //创建节点

Node *t = (Node *)malloc(sizeof(Node));

t->data = data;

t->next = NULL;

// if (i < 1 || i > length(L))

if (i < 1)

return false;

else

{

//定位到目标节点前一个

Node *p = L->next;

// int j = 1;

// for (; j < i - 1; j++, p = p->next)

// ;

int j = 0;

for (; j < i - 1; j++, p = p->next)

;

//插入节点

t->next = p->next;

p->next = t;

return true;

}

}

void printList(List L)

{

if (L->next == NULL)

{

printf("List is empty\n");

}

else

{

Node *p = L->next;

while (p)

{

printf("%c ", p->data);

p = p->next;

}

}

}

int length(List L)

{

if (L->next == NULL)

{

return 0;

}

else

{

int i = 0;

Node *p = L->next;

// for (; p != NULL; i++)

// {

// p = p->next;

// }

while (p->next != NULL)

while (p != NULL)

{

i++;

p = p->next;

}

return i;

}

}

bool isEmpty(List L)

{

if (L->next)

return false;

else

return true;

}

bool getElem(List L, int i, elemtype &e)

{

if (i < 1 || i > length(L))

return false;

else

{

Node *p = L->next;

for (int j = 1; j <= i; j++, p = p->next)

;

e = p->data;

return true;

}

}

//根据元素值找元素位置

bool getLogicElem(List L, elemtype e, int &i)

{

if (L->next == NULL)

{

i = 0;

return false;

}

else

{

Node *p = L->next;

int j = 0;

for (; p->data != e; j++, p = p->next)

;

i = j;

return true;

}

}

bool delElem(List L, int i)

{

if (i < 0 || i > length(L))

return false;

else

{

Node *p = L->next;

//定位到目标元素的前一个位置

int j = 1;

for (; j < i - 1; j++, p = p->next)

;

Node *t = p->next;

p->next = t->next;

free(t);

return true;

}

}

bool destroyList(List L)

{

if (!(L->next))

return false;

else

{

Node *p = L->next;

Node *t = L->next;

while (p)

{

t = p;

p = p->next;

free(t);

}

return true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值