C语言:链表的循环,两种思考方法,第一种用select_1()实现,第二种用select_2()实现.
2014-05-27 22:12
666 查看
#include <stdio.h> #include <stdlib.h> #include<malloc.h> struct s { int n; struct s *next; }; int i; struct s *head, *tail; void creat(m) { struct s *p, *p1; head = NULL; for(i=0; i<m; i++) { p = (struct s*)malloc(sizeof(struct s)); printf("Num %d: ", i+1); scanf("%d", &p->n); if(i==0) head = p; else p1->next = p; p1 = p; } tail = p1; tail->next = head; } void select_1(int m)//第一种循环方法 { struct s *p, *q; int w=0; p = tail; while( p != p->next) { w++; q = p, p = p->next; if( w%m == 0) { printf("\nDelete the number: %d\n", p->n); q->next = p->next; free(p); p = q->next; //不能写成 p = p->next,因为free(p),已释放p节点所占用的内存空间. w++; } } printf("\nOutput circular list the last node: %d\n\n", p->n); } void select_2(int m)//第二种循环循环方法 { struct s *p, *q; int w=0; q = tail; while( q != q->next) { w++; p = q->next; if( w%m == 0) { printf("\nDelete the number: %d\n", p->n); q->next = p->next; free(p); } else q = q->next; } printf("\nOutput circular list the last node: %d\n\n", q->n); } void main() { int a, n, b, m; printf(" \nPlease input the list nodes number: "); scanf("%d", &a); printf("\n"); creat(a); printf("\nPlease input the interval: "); scanf("%d", &n); select_1(n); printf(" \nPlease input the list nodes number: "); scanf("%d", &b); creat(b); printf("\n"); printf("\nPlease input the interval: "); scanf("%d", &m); select_2(m); }
相关文章推荐
- C语言:链表的逆序,两种思考方法,第一种用rev_1()实现,第二种用rev_2( )实现.
- 【C语言】用递归和循环两种方法实现单链表倒置
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 链表的C语言实现之循环链表及双向链表
- C语言,数组实现约瑟夫环问题(两种方法)
- 用两种方法来实现循环队列
- 带哨兵的双向循环链表的C语言实现
- 链表的C语言实现之循环链表及双向链表(转)
- 带哨兵的双向循环链表的C语言实现
- 链表的C语言实现之循环链表及双向链表
- linux中C语言实现双向循环链表
- 关于JS获取select值的两种实现方法
- 单链表翻转的多种方法实现(c语言)
- 链表的C语言实现之循环链表及双向链表
- C语言实现双向循环链表[下]
- C语言实现数据结构中的循环链表
- 双向循环链表 C语言通用编程的思考
- 链表反转的两种实现方法
- 单链表翻转的多种方法实现(c语言)
- 关于JS获取select值的两种实现方法