程序员面试宝典_链表基本操作,建立,求长,删除和插入特定值的结点
2015-05-07 22:21
489 查看
删除data1值的结点,插入data2值的结点 /*程序参见《程序员面试宝典》179页,链表长度不包含头结点,终止条件:输入0 ********************************************************************/ #include<stdio.h> #include <stdlib.h> #include<conio.h> typedef struct student { int data; struct student *next; }node; //单链表建立过程,函数声明和定义 node *creat() { node *head,*p,*s; int x,cycle=1; head=(node*)malloc(sizeof(node)); if(head==NULL) { printf("分配存储空间失败"); exit(0); } p=head; while(cycle) { printf("please input the data:"); scanf("%d",&x); if(x!=0) { s=(node*)malloc(sizeof(node)); if(s==NULL) { printf("分配存储空间失败"); exit(0); } s->data=x; printf("%d\n",s->data); p->next=s; p=s; } else cycle=0; } head=head->next; //这一句的解释:head原来为指向头结点的指针(头指针),经过这句后,head指向第一个结点 //单链表的长度不包含头结点,头结点位置一般设为i=0。 p->next=NULL; printf("yyy %d\n",head->data); return head; } //单链表测长************************************ int length(node *head) { int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return n; } //单链表打印@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ void print(node *head) { node *p; int n; n=length(head); printf("Now,these %d records are :\n",n); p=head; if(head!=NULL) while(p!=NULL) { printf("uuuu %d \n ",p->data); p=p->next; } } <pre name="code" class="cpp">//单链表删除一个数据域为data1的结点 node *del_data1(node *head,int data1) { node *p1,*p2; p1=head; while(data1!=p1->data&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(data1==p1->data) { if(p1==head)//删除第一个结点 { head=p1->next; free(p1); } else p2->next=p1->next;// } else printf("\n%d could not been found",data1); return head; } //单链表插入一个数据域为data2的结点 node *insert_data2(node *head,int data2) { node *p0,*p1,*p2; p1=head; p0=(node *)malloc(sizeof(node)); p0->data=data2; while(p0->data>p1->data&&p1->next!=NULL) { p2=p1; p1=p1->next; } if(p0->data<=p1->data) { if(head==p1)//插入位置为第一个结点之前 { p0->next=p1; head=p0; } else//一般情况 { p2->next=p0; p0->next=p1; } } else//插入位置为最后一个结点之后 { p1->next=p0; p0->next=NULL; } return head; }
//主函数************************** int main() { node *head1;int n1; head1=creat();//建立 n1=length(head1); printf("the length of the list is %d\n",n1);//求表长 print(head1);//打印 return 0; }
相关文章推荐
- 单链表的建立(头部延长、尾部延长)、插入操作、删除操作(无头结点的删除、有头结点的删除)
- 链表基本操作(建立、修改,插入、删除、打印)
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置(转)
- 程序员面试宝典(第三版)——单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 链表建立、删除、插入基本操作
- 链表的基本操作,建立,测长,删除,打印,插入
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 单链表结点读取、插入、删除操作(基本操作)-C++
- 链表的基本操作(C语言版):建立,插入,删除,查找,输出
- 单链表的基本操作:建立,求长度,输出,排序,插入,删除,逆置
- c语言链表基本操作(带有创建链表 删除 打印 插入)
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作
- 数据结构之循环链表操作3-(合并,拆分,插入,删除,建立等)
- 单向链表的基本操作-创建、插入、删除
- 将一个值插入到有序的单链表,实现插入、删除、输出等基本操作