c语言用链表编写简单程序,C语言单链表简单实现(简单程序复杂化)

PS: goto还是很好玩的。

#include

#include

typedef struct _node{

int value;

struct _node *next;

} Node;

typedef struct _list{

Node* head;

}List;

void add(List* plist,int number);

void print(List* list);

void deletel(List* list,int number);

void freel(List* list);

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

Node *head = NULL;

List list;

int number=0;

list.head=NULL;

for(;;){

printf("\n这是一个链表,现有如下功能 1.添加节点 2.遍历链表 3.查找并删除节点 4.释放链表 5.退出程序 \n请输入你想要进行的操作的选项:\n" );

out:

scanf("%d",&number);

switch(number){

case 1:

printf("你选择了添加节点\n请输入添加节点的值,输入-1结束添加\n");

do{

scanf("%d",&number);

if(number != -1){

//添加一个新的节点挂载。

add(&list,number);

}

}while(number != -1);

printf("添加完毕");

break;

case 2:

printf("你选择了遍历链表\n");

//打印链表

print(&list);

break;

case 3:

printf("你选择了查找并删除节点,请输入节点数据\n");

scanf("%d",&number);

//删除一个节点

deletel(&list,number);

break;

case 4:

printf("你选择了释放链表");

//释放链表

freel(&list);

printf("释放完毕");

break;

case 5:

goto end;

default :

printf("输入错误,请重新输入\n");

goto out;

}

}

end:

printf("拜拜");

return 0;

}

void add(List* plist,int number){

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

p->value =number;

p->next =NULL;

Node *last =plist->head;

if(last){

while(last->next){

last = last->next;

}

last->next=p;

}else{

plist->head = p;

}

}

//遍历链表

void print(List* list){

Node *p;

for(p=list->head;p;p=p->next){

printf("%d\t",p->value);

}

printf("\n");

}

//查找并删除节点

void deletel(List* list,int number){

Node* p;

int isFound =0;

for(p=list->head;p;p=p->next){

if(p->value==number){

printf("找到了\n");

isFound = 1;

break ;

}

}

if(!isFound){

printf("没找到");

}

Node *q;

for(q=NULL,p=list->head;p;q=p,p=p->next){

if(p->value==number){

if(q){

q->next = p->next;

}else{

list->head=p->next;

}

free(p);

printf("已经删除");

break ;

}

}

}

//释放链表

void freel(List* list){

Node *q;

Node* p;

for(p=list->head;p;p=q){

q=p->next;

free(p);

}

}

读书和健身总有一个在路上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值