用链表实现的一个小程序(C语言)
2011-08-24 09:55
375 查看
这个程序是实现这样一个功能:输入一列整数,输出是把这列数重复出现的数字过滤掉。
例如:输入12 13 12 14 13,输出:12 13 14,用链表实现。
例如:输入12 13 12 14 13,输出:12 13 14,用链表实现。
//liushuaikobe1993@163.com #include <stdio.h> #include <stdlib.h> typedef struct NODE //节点的结构体类型 { int e; struct NODE *next; }node,*linklist; int get_element() //获取节点的数据段数据 { int i; scanf("%d",&i); return i; } linklist build_list(int n)//链表的建立,其中n是链表的长度 { linklist p,r,head=NULL; int i; printf("请一次性输入数字:"); for (i=0;i<n;i++) { p=(linklist)malloc(sizeof(node)); p->e=get_element(); p->next=NULL; if (!head)//head为空,本次建立的是第一个节点,将它赋给head head=p; else//head不为空,本次建立的不是第一个节点,将它接在链表的尾部 r->next=p; r=p;//r永远指向链表最后一个节点 } return head; } void del_same_element(linklist head) { linklist r,p,t; for (r=head;r!=NULL;r=r->next) for (p=r->next;p!=NULL;p=p->next) if (r->e==p->e) { for (t=head;t->next!=NULL;t=t->next) if (t->next==p) { t->next=p->next; break; } } } void display_list(linklist head) { linklist r; for (r=head;r/*->next*/!=NULL;r=r->next)//如果"->next"不被注释掉,那么这也是错误的,链表的最后一个元素无法被遍历 printf("%d ",r->e); /*linklist r=head; //这段代码是错误的,这样遍历链表会导致链表最后一个节点无法遍历的到,请读者自己分析 while(r!=NULL) { printf("%d ",r->e); r=r->next; }*/ } int main() { int num; while(1) { printf("输入元素个数(至少两个):"); scanf("%d",&num); if (num>=2) break; } linklist head=build_list(num); del_same_element(head); display_list(head); return 0; }
相关文章推荐
- C语言实现一个自动刷弹幕的程序
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- 用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
- c语言:模拟实现一个输入密码自动取款的程序
- 【C语言】【面试题】使用main函数的参数,实现一个整数计算机,程序可以接受三个参数
- C语言实现的一个简单的HTTP程序
- 用c语言+单向链表实现一个贪吃蛇
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 一个简单的四则运算程序C语言实现--实现处理括号
- 用C语言编写一个包含链表的初始化、插入、删除、查找等基本操作的程序。
- 关于用栈链表来实现中序表达式的一个小程序 《数据结构》
- C语言实现的一个简单的HTTP程序
- C语言 程序实现将一个数组所有奇数放在前半部分,偶数位于后半部分
- 一个简单的四则运算程序C语言实现--无法处理括号
- C语言实现的一个简单的HTTP程序
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 模拟器与程序分析-4-一个简单的周期精确模拟器(CAS)的C语言实现
- 赛码网,股神问题,用C语言自己实现的一个程序,仅供参考
- <C语言>使用一个二维数组实现学生姓名管理系统,要求不能使用链表
- C语言链表实现——无限录入单词程序