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

功能我已经写在头文件里面了#include"malloc.h"#include"stdio.h"#definemaxsize100typedefstruct{charda... 功能我已经写在头文件里面了
#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语言学的差希望大神们能够指点一下因为财富不多了所以拜托了
展开
 我来答
xoaxa
2013-09-27 · TA获得超过8608个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3442万
展开全部

/*

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;
}
Nemo_英刚
2013-09-27
知道答主
回答量:12
采纳率:0%
帮助的人:3.6万
展开全部
我不太确定是不是正确的理解了你的意思。
你的插入函数 listinsert() 是没有错误的。如果你想调用的话,必须在main函数里面对一个已存在的线性表调用,因为你的listinsert函数没有创建表的功能。提醒你一下,调用函数的时候注意参数的传入,如果创建表和初始化表没问题,就是传入的参数是错的,你可以debug进去看一下。

另外,线性表有两种,顺序线性表和链表(单链表和双链表),你的是顺序线性表。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
妙哉不言诗c
2013-09-27 · TA获得超过438个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:270万
展开全部
在倒数第二行 你为什么让char接收bool型呢???
追问
貌似是要判定,只是我想知道怎么将插入后的结果输出出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友372162a
2013-09-27
知道答主
回答量:18
采纳率:0%
帮助的人:5.1万
展开全部
第一次看到这样的代码。。顺序表。。。不就是链表么?你的指针域呢?没指针怎么和后面的结点连起来?
追问
不会吧,顺序表是链表吗……
追答
那就是用数组实现顺序表。不然你都没线你怎么把每个结点穿起来呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式