已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
2015-05-15 22:08
871 查看
/* 已知线性表中元素以值递增有序排列,并以单链表作为存储结构
* 设计一个算法,删除表中值相同的多余元素
* 使得操作后表中所用元素值均不同,同时释放被删除的结点空间
*/
* 设计一个算法,删除表中值相同的多余元素
* 使得操作后表中所用元素值均不同,同时释放被删除的结点空间
*/
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typedef int ElemType; typedef int Status; typedef struct Node { ElemType data; struct Node * next; }Node,*LinkList; //单链表的初始化 Status InitLinkList(LinkList * L) { (*L)=(LinkList)malloc(sizeof(Node)); if((*L)==NULL) { printf("内存分配失败!\n"); return 0; } (*L)->next=NULL; return OK; } //单链表的建立 Status Create(LinkList * L,int n) { LinkList P,Q; ElemType Elem; Q=(*L); printf("请按递增顺序输入元素:\n"); for(int i=0;i<n;i++) { P=(LinkList)malloc(sizeof(Node)); scanf("%d",&Elem); P->data=Elem; Q->next=P; Q=P; } P->next=NULL; return OK; } //删除结点 Status Delete(LinkList * L,int Location) { LinkList Q,P; int count=0; int k=Location+1; Q=(*L); P=(*L)->next; while(P->next) { Q=Q->next; P=P->next; count++; if(count==Location) { Q->next=P->next; } } return OK; } //定位删除结点的位置并删除 Status Locate(LinkList * L) { LinkList First,Second; int count=1; First=(*L)->next; Second=(*L)->next->next; while(Second) { if(First->data==Second->data) { Delete(L,count); Second=Second->next; } else { count++; First=First->next; Second=Second->next; } } return OK; } void Print(LinkList * L) { LinkList P; P=(*L)->next; while(P) { printf("%d ",P->data); P=P->next; } printf("\n"); } int main() { LinkList L; int Number; InitLinkList(&L); printf("请输入元素个数:\n"); scanf("%d",&Number); Create(&L,Number); printf("输出链表:\n"); Print(&L); Locate(&L); printf("输出去掉相同元素后链表:\n"); Print(&L); return 0; }
相关文章推荐
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- 设单链表以非递减有序排列,设计算法实现在单链表中删除值相同的多余结点
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 设单链表以非递减有序排列,设计算法实现在单链表中删去值相同的多余结点。
- 设计在单链表中删除值相同的多余结点的算法
- 删除2个非递增链表相同的元素,并且合并为一个非递增链表
- 设顺序表a中的数据元素递增有序,试设计一个算法,将x插入到顺序表的适当位置,以保持该表的有序性。
- 已知一个矩阵 A(m*n) 的元素每行每列都按从小到大有序, 试设计一个算法判断任一给定值 k 是否在矩阵 A(m*n) 中
- 整数数组中,每个元素均出现两次,除了一个元素例外,如何找出这个元素?能否设计一个线性时间的算法,且不需要额外的存储空间?
- 【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结构,实现有序表的合并
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- 编写算法,对非递减顺序存储的线性表操作,将表中相等的多余元素删除,变为严格递增
- 一个连通图,采用邻接表作为存储结构,设计一个算法从顶点v出发的深度优化遍历的非递归过程
- 一个连通图,采用邻接表作为存储结构,设计一个算法从顶点v出发的深度优化遍历的非递归过程