C link
来源:互联网 发布:ios降级会丢失数据吗 编辑:程序博客网 时间:2024/05/18 03:42
1 link2.h
#ifndef _LINK2_H#define _LINK2_H#include<stdio.h>#include<stdlib.h>typedef struct node{ int data; struct node *next;}NODE,*linknode;linknode createNode_2();linknode insertLink_2(linknode head,linknode p);linknode insertLink_2h(linknode head,linknode p);void showLink_2(linknode head);int lengthLink_2(linknode head);linknode searchLink_2(linknode head,int data);linknode deleteLink_2(linknode hea,int data);linknode deleteLink_h(linknode hea,int data);void freeLink_2(linknode head);#endif
2 link2.c
#include"link2.h"linknode createNode_2(){ linknode p=(linknode)malloc(sizeof(NODE)); if(p==NULL) { printf("申请空间失败:\n") ; return NULL; } printf("请输入结点信息:\n"); scanf("%d",&p->data); p->next=NULL; return p;}linknode insertLink_2(linknode head,linknode p){ linknode tail=head; if(head==NULL) { head=p; head->next=p; return head; } while(tail->next!=head) //tail->next!=NULL { tail=tail->next; //指针后移 } tail->next=p; p->next=head;//尾结点指向头结点 return head;}linknode insertLink_2h(linknode head,linknode p){ linknode tail=head; if(head==NULL) { head=p; head->next=p; return head; }// while(tail!=NULL) while(tail->next!=head) { tail=tail->next; } p->next=head; head=p; tail->next=p; return head;}void showLink_2(linknode head){ linknode p=head; if(head==NULL) { printf("空链表\n"); return ; } while(1)// { printf("first=%d ",p->data); p=p->next; if(p==head)//证明为循环链表,打印第二次 { printf("\n"); while(1) { printf("second=%d ",p->data); p=p->next; if(p==head) break; } break; } } printf("\n");}int lengthLink_2(linknode head){ int len=0; linknode p=head; if(head==NULL) return len; while(1) { p=p->next; len++; if(p==head) { return len; } }}linknode searchLink_2(linknode head,int data){ linknode p=head; if(head==NULL) return NULL; while(1) { if(p->data==data) return p; p=p->next; if(p==head) return NULL; }}//单向循环链表的删除linknode deleteLink_2(linknode head,int data){ //增加表头 linknode p=(linknode)malloc(sizeof(NODE)); linknode ph=head; p->next=head; linknode s,tmp; if(p->next==NULL)//空链表 { free(p); return NULL; } if(p->next->data==data) { if(p->next->next==head) //第一个结点为删除的数据且只有1个结点情况 { free(head); free(p); return NULL; } else//第一个结点为删除数据,至少2个结点 { s=p->next; p->next=s->next; free(s); ph=p->next; s=p->next; while(1) { if(s->next==head) { s->next=ph; free(p); return ph; } else s=s->next; } } } //删除其他的结点情况 else { if(p->next->next==head) //只有一个结点且数据不为删除的数据 { free(p); return head; } //删除其他结点 tmp=p;//保存表头指针 while(1) { p=p->next; if(p->next->data==data) { s=p->next; p->next=s->next; free(s); free(tmp); return head; } } }}void freeLink_2(linknode head){ linknode p=head; linknode s=head; if(head==NULL) return; while(1) { if(p->next==head) { free(p); return; } else { s=s->next; free(p); p=s; } }}
3 main
#include"link2.h"int main(){ int i,len,data; linknode p,head=NULL; for(i=0;i<5;i++) { p=createNode_2(); if(p==NULL) { printf("结点创建失败:\n"); continue; } head=insertLink_2(head,p); } showLink_2(head); len=lengthLink_2(head); printf("len=%d\n",len); printf("请输入查找的数据:\n"); scanf("%d",&data); p=searchLink_2(head,data); if(p==NULL) printf("没有找到该数据\n"); else printf("%d\n",p->data); printf("请输入删除的数据:\n"); scanf("%d",&data); head=deleteLink_2(head,data); showLink_2(head); freeLink_2(head); return 0;}
0 0
- C link
- C/C++link
- linux c program link....
- str link in c
- C link table question
- The Link List with C
- Problem<c>( Link-cut tree )
- LINK - Objective-C to C#
- C语言link过程详解
- link
- link
- link
- LINK
- link
- link
- link
- Link
- link
- PAT 1011
- 总线的控制方式
- C++中友元详解
- Bootstrap初级学习(一)表单<form>
- 第三章:关系模式设计理论
- C link
- 串口通信编程--多线程异步方式
- 交叉熵及相关
- navigation 包各个参数含义
- VDI管理员应该掌握的四种虚拟磁盘格式
- Swift中的required修饰符
- android 内存管理
- Xlistview
- [PAT] B1009