数字根c语言链表实现,c语言简单链表实现 - 阿豪boy的个人空间 - OSCHINA - 中文开源技术交流社区...

#include

#include

#define ElemType int

typedef struct{

ElemType e;

struct Node *next;

}Node,*pNode,**ppNode;//使用pNode表示一级指针,ppNode表示二级指针

//获得链表中节点数目

int getElemNum(pNode head);

//获得链表最后一个结点的指针

pNode getLastElem(pNode head);

//在链表尾部追加结点,若链表为空,则该节点为首结点

void appendElem(ppNode head,ElemType e);

//获得链表的第i个结点的指针 n>=i>0

pNode getElem(pNode head,int i);

//删除链表尾节点

void delLastElem(ppNode head);

//显示链表的结点数目以及结点数据

void showElem(pNode head);

//删除链表的第i个结点 n>=i>0

void delElem(ppNode head,int i);

//在第i个结点前面添加结点

void insertElem(ppNode head,int i,ElemType e);

int main(int argc, char *argv[])

{

pNode head=NULL;

showElem(head);

appendElem(&head,1);

appendElem(&head,2);

appendElem(&head,3);

appendElem(&head,4);

showElem(head);

delLastElem(&head);

showElem(head);

insertElem(&head,1,10);

showElem(head);

delElem(&head,2);

showElem(head);

pNode p=getElem(head,3);

p->e=9999;

showElem(head);

return 0;

}

int getElemNum(pNode head){

if(!head) return 0;

pNode p=head;

int i=0;

while(p){

i++;

p=p->next;

}

return i;

}

pNode getLastElem(pNode head){

if(!head) return NULL;

pNode p=head;

while(p->next) p=p->next;

return p;

}

void appendElem(ppNode head,ElemType e){

pNode node = (pNode)malloc(sizeof(Node));

node->e=e;

node->next=NULL;

if(!*head){

*head=node;

return;

}

pNode p;

p=getLastElem(*head);

p->next=node;

}

void delLastElem(ppNode head){

int n =getElemNum(*head);

if(1>n) return;

if(n==1){

free(*head);

*head=NULL;

return;

}

pNode p = getElem(*head,n-1);

free(p->next);

p->next=NULL;

return;

}

pNode getElem(pNode head,int i){

int n = getElemNum(head);

if(i<1 || i>n) return;

int j=1;

pNode p=head;

while(j

j++;

p=p->next;

}

return p;

}

void showElem(pNode head){

if(!head){

printf("empty link\n");

return;

}

pNode p =head;

int n =getElemNum(head);

printf("this link has %d elems\n",n);

while(p){

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

p=p->next;

}

printf("\n");

return;

}

void delElem(ppNode head,int i){

int n =getElemNum(*head);

if(i<0 || i>n) return;

if(i==n) {

delLastElem(head);

return;

}

if(i==1){

*head=(*head)->next;

return;

}

pNode p1,p2;

p1=getElem(*head,i-1);

p2=getElem(*head,i+1);

p1->next=p2;

return;

}

void insertElem(ppNode head,int i,ElemType e){

int n=getElemNum(*head);

if(i<1 || i>n) return;

pNode node =(pNode)malloc(sizeof(Node));

node->e=e;

if(1==i){

node->next=getElem(*head,1);

*head=node;

return;

}

pNode p1,p2;

p1=getElem(*head,i-1);

p2=getElem(*head,i);

node->next=p2;

p1->next=node;

return;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值