c语言数据结构 amp l,C语言数据结构——单链表的增删改查

注意: LinkList L 于 LinkList &L 的区别,前者只能改变指针指向的内容,后者同时还可以修改指针本身,即指针内部

#include#include#includetypedef int ElemType;

typedef int Status;

//定义结构体

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode, *LinkList;

//建立单链表

LinkList CreateList(int n)

{

LinkList L = (LinkList)malloc(sizeof(LinkList));//建一个头结点并初始链表

L->next = NULL;

int x, i;

LinkList r = L;

printf("input %d value:", n);

for (i = 0; i < n; i++)

{

scanf_s("%d", &x);

LinkList p = (LinkList)malloc(sizeof(LinkList));

p->data = x;

p->next = NULL;

r->next = p;

r = r->next;

}

return L;

}

//查找第i个元素并赋给e

Status GetElem_L(LinkList &L, int i, ElemType &e)

{

LinkList p = L->next;

int j = 1;

while (p&&j < i)

{

p = p->next;

++j;

}

if (!p || j > i)

return 0;

e = p->data;

return 1;

}

//在第 i 个位置插入 e

Status InsertList(LinkList &L, int i, ElemType e)

{

LinkList p = L;

int j = 0;

while (p&&j < i - 1)

{

p = p->next;

++j;

}

if (!p || j > i - 1)

return 0;

LinkList s = (LinkList)malloc(sizeof(LNode));

s->data = e;

s->next = p->next;

p->next = s;

return 1;

}

//删除第 i 个位置的元素,并将值保存于 e

Status DeleteList(LinkList &L, int i, ElemType &e)

{

LinkList p = L;

int j = 0;

while (p->next&&j < i - 1)

{

p = p->next;

++j;

}

if (!(p->next) || j > i - 1)

return 0;

LinkList q = p->next;

p->next = q->next;

e = q->data;

free(q);//注意一定要释放内存空间

return 1;

}

//输出单链表

void Output(LinkList L)

{

LinkList p = L->next;

printf("output element:\n");

for (; p != NULL; p = p->next)

{

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

}

printf("\n");

}

//主函数

int main()

{

LinkList L;

int n,i;

ElemType e;

printf("enter the length of the list:");

scanf_s("%d", &n);

L = CreateList(n);

Output(L);//输出单链表

printf("enter the number you want to find:");//查找

scanf_s("%d", &i);

GetElem_L(L, i, e);

printf("the %d number is %d\n", i, e);

printf("please enter the number and element you want to insert:");//插入

scanf_s("%d %d", &i, &e);

InsertList(L, i, e);

Output(L);

printf("please enter the number and element you want to delete:");//删除

scanf_s("%d %d", &i, &e);

DeleteList(L, i, e);

Output(L);

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值