线性表的数据结构有哪些 已知一个线性表元素按非递减有序排列,编写一个函数删除线性表中多余的值相同的元素。是单链表
已知一个线性表元素按非递减有序排列,编写一个函数删除线性表中多余的值相同的元素。是单链表
已知一个线性表元素按非递减有序排列,编写一个函数删除线性表中多余的值相同的元素。是单链表
哎!你刚提问题没多久,我就开始写代码,写到现在,不采纳真的是太对不起我了...
因为你没有写出具体的线性表,所以我假设该线性表是需要手动输入的!
代码如下运行通过:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*Sqlist;
void IniList(Sqlist *L)
{
*L=(Sqlist)malloc(sizeof(Node));
(*L)->next=*L;
}
void Create_cLinkList(Sqlist L)
{
Node *s;
int c;
int flag=1;
bool bl;
L->data=NULL;
L->next=NULL;
while(flag)
{
bl=scanf("%d",&c);
if(bl)
{
s=(Node *)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
{
flag=0;
}
}
}
void Treserve( Sqlist &L)
{
Node *p;
Node *s;
s=p=L->next;
while(p->next!=NULL)
{
p=s;
p=p->next;
if(s->data==p->data)
{
if(p->next==NULL)
s->next=NULL;
else
s->next=p->next;
}
else
{
s=p;
}
}
}
main()
{
Sqlist la;
Node *p;
Node *s;
IniList(&la);
printf("输入循环单链表A数据,按从小到大的顺序输入,输入$符号结束:n");
Create_cLinkList(la);
Treserve( la);
s=la;
p=la->next;
while(s->next!=NULL)
{
printf("%d",p->data);
s=p;
p=p->next;
}
}
已知一个线性表元素按非递减有序排列,怎么编写一个函数删除线性表中多余的值相同的元素的单链表?
代码如下运行通过:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*Sqlist;
void IniList(Sqlist *L)
{
*L=(Sqlist)malloc(sizeof(Node));
(*L)->next=*L;
}
void Create_cLinkList(Sqlist L)
{
Node *s;
int c;
int flag=1;
bool bl;
L->data=NULL;
L->next=NULL;
while(flag)
{
bl=scanf("%d",&c);
if(bl)
{
s=(Node *)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
{
flag=0;
}
}
}
void Treserve( Sqlist &L)
{
Node *p;
Node *s;
s=p=L->next;
while(p->next!=NULL)
{
p=s;
p=p->next;
if(s->data==p->data)
{
if(p->next==NULL)
s->next=NULL;
else
s->next=p->next;
}
else
{
s=p;
}
}
}
main()
{
Sqlist la;
Node *p;
Node *s;
IniList(&la);
printf("输入循环单链表A数据,按从小到大的顺序输入,输入$符号结束:n");
Create_cLinkList(la);
Treserve( la);
s=la;
p=la->next;
while(s->next!=NULL)
{
printf("%d",p->data);
s=p;
p=p->next;
}
}
已知一顺序表A,其元素值非递减有序,编写一个函数删除顺序表中多余的值相同的元素
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#define MAXN 10000000using namespace std ;int a[MAXN] , n , nsize , tmp[MAXN] ;int cmp( const void * _a , const void * _b )
{
int *a = ( int* )_a ;
int *b = ( int* )_b ;
return *a - *b ;
}void distinct()
{
nsize = 0 ;
for( int i = 0 ; i < n ; ++i )
{
if( a[i] != a[i+1] )
{
tmp[nsize++] = a[i] ;
}
}
memcpy( a , tmp , sizeof( int )*nsize ) ;
}int main()
{
cout << "表中元素个数为:(不超过10000000)" << endl ;
cin >> n ;
for( int i = 0 ; i < n ; ++i )
{
cin >> a[i] ;
}
非递减排序
qsort( a , n , sizeof( int ) , cmp ) ;
删除相同元素
distinct() ;
输出去重后的表,10个一行
int t = 0 ;
for( int i = 0 ; i < nsize ; ++i )
{
if( t == 10 )
cout << endl ;
cout << a[i] << " ";
}
return 0 ;
}
已知一个数组中的元素按元素值非递减有序排列,编写一个函数删除数组中多余的值相同的元素
#define MAXSIZE 100
int data[MAXSIZE];
void Deleted(int sarr[])
{
int i,j,arr[N];N是已排序数组中元素的个数
j=1;
arr[0]=sarr[0];
for(i=0;i<N;i++)
if(sarr[i+1]!=sarr[i])
{ arr[j++]=sarr[i+1]; }
for(i=0;i<j;i++)
sarr[i]=arr[i];
N=j;
return;
}

已知一个顺序表A。其元素值非递减有序排列,编写一算法删除表中多余的值相同的元素。(C++)
void DelElem(ElemType Sqlist[],int &n,int i){
int j;
if(i<1||i>n)
exit(0)
for(j=i;j<n;j++)
Sqlist[j-1]=Sqlist[j];
n--;
}
一个顺序表元素值有序递增,编写算法,删除顺序表中值相同的多余元素。
template<class T>
void EraseDuplicates(std::list<T> &vals)
{
std::set<T> unique_vals(vals.begin(), vals.end());
vals = std::list<T>(unique_vals.begin(), unique_vals.end());
}
在一个非递减有序线性表中,插入一个值为X的元素,使插入后的线性表仍为非递减有序。
是不理解非递减有序线性表吗
就是可能有元素会大小相同。就跟非负,那就是0和正数一样。
如: 1、2、3、3、4、5就是非递减有序
编写一程序,将x插入到线性表合适位置(线性表中的数据元素是按值递减排列的)
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int ElemType;
typedef int Status;
typedef struct Lnode *Linklist;这里稍微做了下改进,效果是一样的
typedef struct Lnode{
ElemType data;
Linklist next;
}LNode;
void DisplayList_L(Linklist L) {
Linklist p = L->next;
while(p) {
printf("%5dn",p->data);
p = p->next;
}
}
void CreatList_L(Linklist *L, int n) {
int a, i;
Linklist p;
(*L)=(Linklist)malloc (sizeof(LNode));
(*L)->next = NULL;
for(i=n; i>0; --i){
p=(Linklist)malloc(sizeof(LNode));
printf("请输入第%d个节点值:", i);
scanf("%d", &a);
p->data= a;
p->next = (*L)->next;
(*L)->next = p;
}
}
Status ListInsert_L(Linklist *L, int i, ElemType e) {
int j=0;
Linklist p, S;
p = *L;
while(p&&j <i-1) {
p = p->next;
++j;
}
if(!p ||j >i-1) return ERROR;
S = (Linklist) malloc( sizeof(LNode));
S->data = e;
S->next = p->next;
p->next = S;
return OK;
}
Status ListDelete_L(Linklist *L, int i, ElemType *e) {
int j = 0;
Linklist p, q;
p = *L;
while(p->next && j <i-1){
p= p->next;
++j;
}
if(!(p->next) || j > i-1) return ERROR;
q = p->next;
p->next = q->next;
*e= q->data;
free(q);
return OK;
}
int main() {
int n, m;
Linklist L;
printf("请输入构造链表的结点数: n");
scanf("%d",&n);
CreatList_L(&L, n);
DisplayList_L(L);
printf("请输入插入的元素与位置");
scanf("%d%d",&n, &m);
ListInsert_L(&L, m, n);
DisplayList_L(L);
printf("请输入删除的元素的位置:");
scanf("%d", &m);
ListDelete_L(&L, m, &n) ;
DisplayList_L(L);
system("PAUSE");
}需要顺序表的吗?我空间里也有,自己找去
有一线性表存储在一个带头结点的循环单链表L中,写出计算线性表元素个数的算法
int getLength(LinkList *L)
{
LinkList *p = NULL;
int len = 0;
p = L->next; 带有头结点,所以从头节点的下一个节点开始计数
while(p)
{
len++;
p = p->next;指向当前节点的下一个节点
}
return len;
}