/*
GY52122008
请输入插入字符 : -
请输入插入位置 : 7
GY5212-2008
Press any key to continue
*/
#include
#include
#include
#define maxsize 100
typedef struct {
char *data;
int length;
}sqlist;
void initlist(sqlist *&L) { //初始化顺序表
L = (sqlist *)malloc(sizeof(sqlist));
L->data = (char *)malloc(maxsize);
L->length = 0;
}
void createlist(sqlist *&L,char a[],int n) { //建立顺序表
int i;
for(i = 0;i < n;i++) L->data[i] = a[i];
L->length = n;
}
bool listinsert(sqlist *&L,int i,char e) { //插入数据元素
int j;
if(i < 1 || i > L->length + 1) return false;
i--;
for(j = L->length;j > i;j--) L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
return true;
}
bool listdelete(sqlist *&L,int i,char &e) { //删除数据元素
int j;
if(i < 1 || i> L->length) return false;
i--;
e = L->data[i];
for(j = 1;j < L->length - 1;j++) L->data[j] = L->data[j + 1];
L->length--;
return true;
}
int listlength(sqlist *L) { //求线性表长度
return(L->length);
}
void destroylist(sqlist *&L) {
free(L);
}
int locateelem(sqlist *L,char e) { //按元素查找
int i = 0;
while(i < L->length && L->data[i] != e) i++;
if(i >= L->length) return 0;
else return i + 1;
}
void displist(sqlist *L) { //输出线性表
int i;
for(i = 0;i < L->length;i++) printf("%c",L->data[i]);
printf("\n");
}
int main() {
int pos,len;
char ch,data[50] = "GY52122008";
sqlist *L;
initlist(L); // 先初始化
len = strlen(data);
createlist(L,data,len); // 创建表
displist(L);
printf("请输入插入字符 : ");
scanf("%c",&ch);
printf("请输入插入位置 : ");
scanf("%d",&pos);
if(listinsert(L,pos,ch)) displist(L);
else printf("插入操作失败。\n");
free(L->data);
free(L);
return 0;
}
我不太确定是不是正确的理解了你的意思。
你的插入函数 listinsert() 是没有错误的。如果你想调用的话,必须在main函数里面对一个已存在的线性表调用,因为你的listinsert函数没有创建表的功能。提醒你一下,调用函数的时候注意参数的传入,如果创建表和初始化表没问题,就是传入的参数是错的,你可以debug进去看一下。
另外,线性表有两种,顺序线性表和链表(单链表和双链表),你的是顺序线性表。
在倒数第二行 你为什么让char接收bool型呢???
第一次看到这样的代码。。顺序表。。。不就是链表么?你的指针域呢?没指针怎么和后面的结点连起来?