在学习顺序表时创建了一个添加元素的函数,但是使用该函数后无法将顺序表中的元素进行输出
#include
#include
#define initSize 100
typedef int DataType;
typedef struct SeqList{
DataType *data;
int length;
int size;
}SeqList;
void initSeqList(SeqList * L){
L->data=(DataType*)malloc(sizeof(DataType)*initSize);
if(L->data==NULL){
printf("初始化顺序表失败");
return;
}
L->length=0;
L->size=initSize;
}
void addElement(SeqList *L,DataType ele){
if(L->length+1<=L->size){
L->data[L->length-1]=ele;
}else{
DataType *p=L->data;
L->data=(DataType*)malloc(sizeof(DataType)*(L->size)*2);
for(int i=0;i<L->size;i++){
L->data[i]=p[i];
}
L->size=L->size*2;
free(p);
}
}
int posDelete(int pos,SeqList *L){
if(L->data==NULL){
printf("顺序表为空删除失败");
return -1;
}
if(pos<=0||pos>=L->length){
printf("输入的位置非法删除失败");
return -1;
}
for(int i=pos;L->length-1;i++){
L->data[pos]=L->data[pos+1];
}
return L->data[pos];
}
int main()
{
SeqList L;
initSeqList(&L);
addElement(&L,11);
addElement(&L,12);
addElement(&L,9);
addElement(&L,15);
addElement(&L,3);
for(int i=0;i<L.length;i++){
printf("%d",L.data[i]);
}
return 0;
}
能够正常的输出添加的数据
修改如下
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define initSize 100
typedef int DataType;
typedef struct SeqList
{
DataType *data;
int length;
int size;
} SeqList;
void initSeqList(SeqList *L)
{
L->data = (DataType *)malloc(sizeof(DataType) * initSize);
if (L->data == NULL)
{
printf("初始化顺序表失败");
return;
}
L->length = 0;
L->size = initSize;
}
void freeSeqList(SeqList *L) {
free(L->data);
}
void addElement(SeqList *L, DataType ele)
{
if (L->length >= L->size)
{
DataType *p = L->data;
int newSize = L->size * 2;
L->data = (DataType *)malloc(sizeof(DataType) * newSize);
for (int i = 0; i < L->length; i++)
L->data[i] = p[i];
L->size = newSize;
free(p);
}
L->data[L->length] = ele;
L->length++;
}
int posDelete(int pos, SeqList *L)
{
assert(L->data != NULL);
assert(pos >= 0 && pos < L->length);
DataType value = L->data[pos];
for (int i = pos; i < L->length; i++)
L->data[i] = L->data[i + 1];
L->length--;
return value;
}
int main()
{
SeqList L;
initSeqList(&L);
addElement(&L, 11);
addElement(&L, 12);
addElement(&L, 9);
addElement(&L, 15);
addElement(&L, 3);
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
printf("\n");
freeSeqList(&L);
return 0;
}