乌海人才网

数据结构insert插入时,如果顺序表已满,怎么办

发布时间:2019-09-21

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
/*分配内存空间*/
#define size 100 // 顺序表初始化为元素个数
#define increment 10 // 顺序表满,则增加increment个元素
typedef int ElemType;
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
/*初始化顺序表*/
int List(SqList * L)
{
L->elem = (ElemType *) malloc(size * sizeof(ElemType));
if (!L->elem)
return 0;
L->length = 0;
L->listsize = size;
return 1;
}
/*插入元素*/
int insert(SqList * L, int i, ElemType e)
{
int j;
ElemType *newbase;
if (i < 1 || i > L->length + 1)
return 0;
if (L->length >= L->listsize) {
newbase =
(ElemType *) realloc(L->elem,
(L->listsize +
increment) * sizeof(ElemType));
if (!newbase)
return 0;
L->elem = newbase;
L->listsize += increment;
}
for (j = L->length - 1; j >= i - 1; j--)
L->elem[j + 1] = L->elem[j];
L->elem[i - 1] = e;
++L->length;
return 1;
}
/*删除*/
int Dele(SqList * L, int i)//没用到e,删了
{
int j;
if (i < 1 || i > L->length)
return 0;
for (j = i - 1; j < L->length - 1; j++)
L->elem[j] = L->elem[j + 1];
--L->length;
return 1;
}
/* 输入数据 */
int InputSqlist(SqList *L)
{
int i;
ElemType d;
printf("\n输入一串数字,数字间用空格空开,结束输入用#字符: ");
for (i = 0; scanf("%d", &d) == 1; ++i)
insert(L, i+1, d);
while ( (i = getchar()) != '\n' && i != EOF)
continue;
putchar('\n');
return i;
}
/* 打印顺序表 */
int PrintSqlist(SqList *L)
{
int i;
printf("\n输出顺序表: ");
for (i = 0; i < L->length; ++i)
printf("%d ", L->elem[i]);
putchar('\n');
return i;
}
int scan()
{
int d;
printf("请选择要进行的操作\n");
printf("1.初始化\n");
printf("2.建立表\n");
printf("3.遍历 \n");
printf("4.向表中插入元素\n");
printf("5.从表中删除元素\n");
printf("其他键退出。。。。。\n");
scanf("%d",&d);
return(d);
}
void main()
{
int quit=0;
int i;
int flag;//增加标志
ElemType e;
SqList L;
while(!quit)
switch(scan()){
case 1:flag=List(&L);//传参要对应函数啊,还有返回值的接受
if(flag==1){
printf("初始化成功\n");
}else{
printf("初始化失败\n");
exit(-1);
}
break;
case 2:
flag=InputSqlist(&L);//L是SqList类型的,参数要求SqList*类型的,所以要传地址
printf("\n");
break;
case 3:PrintSqlist(&L);
break;
case 4:printf("请输入插入元素的位置和值(中间以空格或回车分隔):\n");
scanf("%d%d",&i,&e);
insert(&L,i,e);//改
break;
case 5: printf("请输入待删除元素的位置:\n");
scanf("%d",&i);
flag=Dele(&L,i);
if(flag){//改
printf("删除成功\n");
}else{
printf("删除失败\n");
}

break;
default:quit=1;
}
}

回复:

你的代码中的插入和删除操作根本就无法实现,应为函数无法修改main()函数中传入的实参变量的,把形参改成指针才行 代码改成如下: #include #define Maxsize 50#define FALSE 0#define TRUE 1typedef int ElemType;typedef int Status;typedef s...

回复:

把这个直接粘到VC里运行, 看一下就知道~ #include #include #define MAX 100 typedef int datatype; typedef struct List { datatype elem[MAX]; int Last; }*SeqList; SeqList InitList() //初始化顺序表 { SeqList L; L=(SeqList)malloc(sizeo...

回复:

#include "stdlib.h"#include "stdio.h"#define LIST_INIT_SIZE 100#define LISTINCREMENT 50typedef struct { int* elem; int length; int listsize; } SqList;bool InitList_Sq(SqList &L){ L.elem=(int *)malloc(sizeof(int)*LIST_INIT_SIZE)...

回复:

查询 这两张表的数据 select t1.codeid ,t1.cedename from table1 t1 union all select t2.codeid ,t2.cedename from table1 t2 查询 这两张表的数据(去掉重复数据) select t1.codeid ,t1.cedename from table1 t1 union select t2.codeid ,t2.c...

回复:

#include #include #include /*分配内存空间*/ #define size 100 // 顺序表初始化为元素个数 #define increment 10 // 顺序表满,则增加increment个元素 typedef int ElemType; typedef struct { ElemType *elem; int length; int listsize; } S...

回复:

这是你自己写的还是抄的? 构建新列表是指哪里哦?回答我,我帮你改 我看了下代码 顺序表的代码没错 应该能通过函数初始化输入数据的 然后你的输入数据的部分 怎么能直接这样插入呢 最好存到一个变量 然后用顺序表的插入方法插入这个元素 我给你改...

回复:

下面的程序先构造一个顺序表,输入n个元素。然后输入要插入的元素,插入完成后,该表仍然保持有序。 #include#include#include#define LIST_INIT_SIZE 100struct list{int *data;int listsize;int listlength;};int create_list(struct list &l)...

回复:

int a; int j =1; for(j;j

回复:

你这里的线性表是特指链表吧?要不然是不会需要把长度加1的。 链表理论上是没有长度限制的(但实际上你不能无限地增长它,因为计算机的内存是有限的) 在插入一个元素后再把长度加1是没有任何问题的,反而这是一个较为妥当的做法,因为如果你一开...

回复:

1、顺序表的插入,常用方法就是从插入点后平移数据。 2、例如: void InsertSeqList(SeqList L, DataType x, int i) { //将元素x插入到顺序表L的第i个数据元素之前 if(L.length==Maxsize) exit("表已满"); if(iL.length+1) exit("位置错"); for ...

上一篇:治疗癫痫最好的地方在哪里啊 下一篇:为什么 百分比=数量比上总数?告诉是什么时候那本书学的。

    返回主页:乌海人才网

    本文网址:http://0473job.cn/view-207775-1.html
      信息删除