用C语言创建一个顺序表并完成插入等操作

功能我已经写在头文件里面了
#include "malloc.h"
#include "stdio.h"
# define maxsize 100
typedef struct
{
char date[maxsize];
int length;
}sqlist;
void createlist(sqlist *&l,char a[],int n) //建立顺序表
{int i;
l=(sqlist *)malloc(sizeof(sqlist));
for(i=0;i<n;i++)
l->date[i]=a[i];
l->length=n;
}
void initlist(sqlist *&l) //初始化顺序表
{
l=(sqlist *)malloc(sizeof(sqlist));
l->length=0;
}
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->date[j]=l->date[j-1];
l->date[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->date[i];
for(j=1;j<l->length-1;j++)
l->date[j]=l->date[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->date[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->date[i]);
printf("\n");
}
应该没什么问题,可是在工作区里面就插入这个功能不知道如何实现
int i,char b,char l[50];
printf("请输入插入位置");
scanf("%d",&i);
if(listinsert(A,i,b));
printf("请输入插入元素\n");
scanf("%c",&b);
l[50]=listinsert(A,i,b);
printf("%s",l);
我额C语言学的差希望大神们能够指点一下因为财富不多了所以拜托了

/*

GY52122008

请输入插入字符 : -

请输入插入位置 : 7

GY5212-2008

Press any key to continue

*/

#include <malloc.h>
#include <stdio.h>
#include <string.h>

#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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-27
我不太确定是不是正确的理解了你的意思。
你的插入函数 listinsert() 是没有错误的。如果你想调用的话,必须在main函数里面对一个已存在的线性表调用,因为你的listinsert函数没有创建表的功能。提醒你一下,调用函数的时候注意参数的传入,如果创建表和初始化表没问题,就是传入的参数是错的,你可以debug进去看一下。

另外,线性表有两种,顺序线性表和链表(单链表和双链表),你的是顺序线性表。
第2个回答  2013-09-27
在倒数第二行 你为什么让char接收bool型呢???追问

貌似是要判定,只是我想知道怎么将插入后的结果输出出来

第3个回答  2013-09-27
第一次看到这样的代码。。顺序表。。。不就是链表么?你的指针域呢?没指针怎么和后面的结点连起来?追问

不会吧,顺序表是链表吗……

追答

那就是用数组实现顺序表。不然你都没线你怎么把每个结点穿起来呢?

相似回答