c++顺序列表,用插入和删除,输入数组就地逆置,
#include"stdafx.h"#include"process.h"#include"iostream.h"#include"stdlib.h"#include"s...
#include "stdafx.h"
#include "process.h"
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
typedef int ElemType;
const LIST_INIT_SIZE=100;
const LISTINCREMENT=10;
typedef struct{
ElemType *elem;
int length;
int listsize;
int incrementsize;
}SqList;
void InitList_Sq( SqList &L, int maxsize = LIST_INIT_SIZE,
int incresize = LISTINCREMENT )
{
// 构造一个最大容量为 maxsize 的顺序表 L
L.elem = new ElemType [maxsize];
// 为顺序表分配一个最大容量为 maxsize 的数组空间
L.length = 0; // 顺序表中当前所含元素个数为 0
L.listsize = maxsize; // 该顺序表可以容纳 maxsize 个数据元素
L.incrementsize = incresize; // 需要时可扩容 incresize 个元素空间
} // InitList_Sq
void ErrorMessage(char *s)
{
cout<<s<<endl;
exit(1);
}
void increment ( SqList &L, int k )
{
// 为顺序表扩大 k 个元素空间
ElemType i,a[];
a = new ElemType[L.listsize+k]; // a 为临时过渡的辅助数组
for(i = 0; i<L.length; i++ ) a[i] = L.elem[i]; // 腾挪原空间数据
delete [] L.elem; // 释放数据元素所占原空间 L.elem
L.elem = a; // 移交空间首地址
L.listsize += k; // 扩容后的顺序表最大空间
delete [] a; // 释放辅助数组空间
}
void ListInsert_Sq( SqList &L, int i, ElemType e )
{
ElemType q,p;
// 在顺序线性表 L 的第 i 个元素之前插入新的元素 e,i 的合法值为
// 1≤i≤L.length+1, 若表中容量不足,则按该顺序表的预定义增量扩容
if (i < 1 || i > L.length+1) ErrorMessage(" i 值不合法");
if (L.length >= L.listsize) increment( L, L.incrementsize );
// 当前存储空间已满,为 L 增加分配 L.incrementsize 个元素空间
q = &(L.elem[i-1]); // q为插入位置
for (p = &(L.elem[L.length-1]); p >= q; --p) *(p+1) = *p;
// 插入位置及之后的元素右移
*q = e; // 插入e
++L.length; // 表长增1
} // ListInsert_Sq
void ListDelete_Sq(SqList &L, int i, ElemType &e)
{
ElemType q,p;
// 在顺序线性表 L 中删除第 i 个元素,并用 e 返回其值。
// i 的合法值为 1≤i≤L.length。
if ((i < 1) || (i > L.length)) ERROR("i值不合法");
p = &(L.elem[i-1]); // p为被删除元素的位置
e = *p; // 被删除元素的值赋给e
q = L.elem+L.length-1; // 表尾元素的位置
for (++p; p <= q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移
--L.length; // 表长减1
} // ListDelete_Sq
void union(SqList &L)
{
for (i=0;i<L.length;i++)
{
ListDelete_Sq(&L,L.length,e);
ListInsert_Sq(&L,i,e);
}
}
void main()
{
int i,e;
SqList *L=(SqList*)malloc(sizeof(SqList));//要开辟空间
L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem)printf("error");
L->length=0;//l是指针不是普通的变量
L->listsize=LIST_INIT_SIZE;
for(i=0;i<10;i++)
{
scanf("%d",L->elem+i);
L->length++;
}
for(i=0;i<10;i++)
printf("%d ",L->elem[i]);
}
刚学这个不太清楚,这是输入一些数组就地逆置,用顺序表的删除和插入,搞得这么就好累啊,毫无头绪 展开
#include "process.h"
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
typedef int ElemType;
const LIST_INIT_SIZE=100;
const LISTINCREMENT=10;
typedef struct{
ElemType *elem;
int length;
int listsize;
int incrementsize;
}SqList;
void InitList_Sq( SqList &L, int maxsize = LIST_INIT_SIZE,
int incresize = LISTINCREMENT )
{
// 构造一个最大容量为 maxsize 的顺序表 L
L.elem = new ElemType [maxsize];
// 为顺序表分配一个最大容量为 maxsize 的数组空间
L.length = 0; // 顺序表中当前所含元素个数为 0
L.listsize = maxsize; // 该顺序表可以容纳 maxsize 个数据元素
L.incrementsize = incresize; // 需要时可扩容 incresize 个元素空间
} // InitList_Sq
void ErrorMessage(char *s)
{
cout<<s<<endl;
exit(1);
}
void increment ( SqList &L, int k )
{
// 为顺序表扩大 k 个元素空间
ElemType i,a[];
a = new ElemType[L.listsize+k]; // a 为临时过渡的辅助数组
for(i = 0; i<L.length; i++ ) a[i] = L.elem[i]; // 腾挪原空间数据
delete [] L.elem; // 释放数据元素所占原空间 L.elem
L.elem = a; // 移交空间首地址
L.listsize += k; // 扩容后的顺序表最大空间
delete [] a; // 释放辅助数组空间
}
void ListInsert_Sq( SqList &L, int i, ElemType e )
{
ElemType q,p;
// 在顺序线性表 L 的第 i 个元素之前插入新的元素 e,i 的合法值为
// 1≤i≤L.length+1, 若表中容量不足,则按该顺序表的预定义增量扩容
if (i < 1 || i > L.length+1) ErrorMessage(" i 值不合法");
if (L.length >= L.listsize) increment( L, L.incrementsize );
// 当前存储空间已满,为 L 增加分配 L.incrementsize 个元素空间
q = &(L.elem[i-1]); // q为插入位置
for (p = &(L.elem[L.length-1]); p >= q; --p) *(p+1) = *p;
// 插入位置及之后的元素右移
*q = e; // 插入e
++L.length; // 表长增1
} // ListInsert_Sq
void ListDelete_Sq(SqList &L, int i, ElemType &e)
{
ElemType q,p;
// 在顺序线性表 L 中删除第 i 个元素,并用 e 返回其值。
// i 的合法值为 1≤i≤L.length。
if ((i < 1) || (i > L.length)) ERROR("i值不合法");
p = &(L.elem[i-1]); // p为被删除元素的位置
e = *p; // 被删除元素的值赋给e
q = L.elem+L.length-1; // 表尾元素的位置
for (++p; p <= q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移
--L.length; // 表长减1
} // ListDelete_Sq
void union(SqList &L)
{
for (i=0;i<L.length;i++)
{
ListDelete_Sq(&L,L.length,e);
ListInsert_Sq(&L,i,e);
}
}
void main()
{
int i,e;
SqList *L=(SqList*)malloc(sizeof(SqList));//要开辟空间
L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L->elem)printf("error");
L->length=0;//l是指针不是普通的变量
L->listsize=LIST_INIT_SIZE;
for(i=0;i<10;i++)
{
scanf("%d",L->elem+i);
L->length++;
}
for(i=0;i<10;i++)
printf("%d ",L->elem[i]);
}
刚学这个不太清楚,这是输入一些数组就地逆置,用顺序表的删除和插入,搞得这么就好累啊,毫无头绪 展开
1个回答
展开全部
你说的表是不是链表?a->b->c;
typedef struct list
{
int data;
P_list next;
}*P_list;
使用递归逆序:
P_list daoxu(P_list in)
{
if (in == NULL || in->next == NULL)
{ return in; }
else if (in->next->next == NULL)
{
in->next->next = in;
return in->next;
}
else
{
P_list temp;
temp = daoxu(in->next);
in->next->next = in;
return temp;
}
}
typedef struct list
{
int data;
P_list next;
}*P_list;
使用递归逆序:
P_list daoxu(P_list in)
{
if (in == NULL || in->next == NULL)
{ return in; }
else if (in->next->next == NULL)
{
in->next->next = in;
return in->next;
}
else
{
P_list temp;
temp = daoxu(in->next);
in->next->next = in;
return temp;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |