c语言实现线性表的链式存储,(C语言)线性表的链式存储增删查改源码

根据姥姥的《数据结构》外加本人测试,代码如下:

#include

#include

#define FALSE -1

#define ERROR NULL

#define TRUE 1

/*

int Length(List L);//求链表的表长

ElementType FindKth(List L,int K);//链表的按序号查找

Position Find(List L,Element X);//链表的按值查找

bool HeadInsert(List L,ElementType X,int i);//带头结点的链式表插入

bool Delete(List L,int i);//带头结点的链式表删除

bool AlterKth(List L,ElementType X,int i);//链表按照位置修改值

bool Alter(List L,ElementType X,ElementType Y);//链表按照值进行修改

void PrintL(List L);//链表打印

*/

typedef struct LNode *PtrToNode;

typedef int ElementType;

typedef int bool;

struct LNode{

ElementType Data;

PtrToNode Next;

};

typedef PtrToNode Position;

typedef PtrToNode List;

void PrintL(List L){

List p = L;

p = p->Next;

while(p){

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

p = p->Next;

}

printf("\n");

}

int Length(List L){

//求链表的表长

int cnt = 0;

Position p = L;

while(p){

p=p->Next;

cnt++;

}

return cnt-1;

}

ElementType FindKth(List L,int K)

//链表的按序号查找

{

Position p = L;

int cnt = 0;

while(p && cnt

p = p->Next;

cnt++;

}

if((cnt == K) && p){

return p->Data;

}else{

return FALSE;

}

}

Position Find(List L,ElementType X){

//链表的按值查找

Position p = L;

while(p && (p->Data!=X)){

p=p->Next;

}

if(p){

return p;

}else{

return ERROR;

}

}

bool HeadInsert(List L,ElementType X,int i){

//带头结点的链式表插入

Position tmp,pre;

int cnt = 0;

pre = L;

while(pre && cnt

pre = pre->Next;

cnt++;

}

if(pre == NULL || cnt!=i-1){

printf("插入位置参数错误!\n");

return FALSE;

}else{

tmp = (Position)malloc(sizeof(struct LNode));

tmp->Data = X;

tmp->Next = pre->Next;

pre->Next = tmp;

return TRUE;

}

}

bool Delete(List L,int i){

//带头结点的链式表删除

Position tmp,pre;

int cnt = 0;

pre = L;

while(pre && cnt

pre = pre->Next;

cnt++;

}

if(pre == NULL || cnt!=i-1){

printf("插入位置参数错误!\n");

return FALSE;

}else{

tmp = pre->Next;

pre->Next = tmp->Next;

free(tmp);

return TRUE;

}

}

bool AlterKth(List L,ElementType X,int i){

//链表按照位置修改值

Position p = L;

int cnt = 0;

while(p && cnt

p = p->Next;

cnt++;

}

if((cnt == i) && p){

p->Data = X;

return TRUE;

}else{

return FALSE;

}

}

bool Alter(List L,ElementType X,ElementType Y){

//链表按照值进行修改

Position p = L;

while(p && (p->Data!=X)){

p=p->Next;

}

if(p){

p->Data = Y;

return TRUE;

}else{

return FALSE;

}

}

int main()

{

List L = (Position)malloc(sizeof(struct LNode));

int m = 0;

L->Next = NULL;

m = HeadInsert(L,1,1);

m = HeadInsert(L,2,2);

m = HeadInsert(L,3,3);

m = AlterKth(L,5,3);//链表按照位置修改值

m = Alter(L,2,7);

m = Delete(L,2);

int n = FindKth(L,2);//按照序号查找

List tmp = Find(L,5);

printf("%d\n",tmp->Data);//按照值查找

n = Length(L);//求表长

printf("%d\n",n);

PrintL(L);

return 0;

}

0320116ff18f0310076d3d31ecd80c03.png

068be7e19a8fd7ea1cc73db7ddbb42c1.png

执念斩长河

发布了3 篇原创文章 · 获赞 2 · 访问量 35

私信

关注

标签:cnt,return,线性表,int,List,C语言,源码,ElementType,Next

来源: https://blog.csdn.net/m0_37149062/article/details/104597687

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值