有没有人能帮我写一个“建立一个空线性表,给线性表赋值,实现插入、删除操作”的程序,数据结构c语言版的

yimingxinshou 2011-10-15 06:09:59
# include<stdio.h>
# include<stdlib.h>
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
# define OVERFLOW -2
# define OK 1
# define ERROR 0
typedef int ElemType;

typedef struct Sqlist
{
ElemType *elem;
int length;
int listsize;
}Sqlist;

void main()
{
Sqlist L;
int i,j,e;
Sqlist InitList_Sq();
int ListInsert_Sq(Sqlist L,int i,ElemType e);
int ListDelete_Sq(Sqlist L,int i);
int PutList(Sqlist L);
L=InitList_Sq();
printf("线性表为:\n");
PutList(L);
printf("输入插入的位置i:\n");
scanf("%d",&i);
printf("输入插入的值:\n");
scanf("%d",&e);
ListInsert_Sq(L,i,e);
printf("线性表为:\n");
PutList(L);
printf("输入删除的位置i:\n");
scanf("%d",&j);
ListDelete_Sq(L,j);
printf("线性表为:\n");
PutList(L);
}

Sqlist InitList_Sq()
{
Sqlist L;
int i;
ElemType* newbase;
L.elem=(ElemType*)malloc(LIST_INIT_SIZE *sizeof(ElemType));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
printf("请输入表中的数据:\n");
for(i=0;;i++)
{
scanf("%d",L.elem[i]);
++L.length;
if(L.length>L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
}
return L;
}

int ListInsert_Sq(Sqlist L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&L.elem[i-1];
for(p=&L.elem[L.length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}

int ListDelete_Sq(Sqlist L,int i)
{
ElemType e,*p,*q;
if(i<1||i>L.length)
return ERROR;
p=&L.elem[i-1];
e=*p;
q=&(L.elem[L.length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
printf("删除的元素为:\n%d\n",e);
return OK;
}

int PutList(Sqlist L)
{
int *p,*q;
p=L.elem;
q=L.elem+(L.length-1);
for(p=L.elem;p<=q;++p)
{
printf("%d",*p);
}
return OK;
}

程序不能运行,可不可以告诉我问题出在哪儿?实在是搞不懂数据结构要怎么写
...全文
2527 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yimingxinshou 2011-11-06
  • 打赏
  • 举报
回复
谢谢你们给我回复啊,我可以结贴了
Toomj 2011-11-06
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef int Status;
typedef char ElemType;

typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;

Status InitList(SqList &L){
//构造一个空的线性表L.
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}

void DestoryList(SqList &L){
//销毁线性表
free(L.elem);
L.elem=NULL;
L.length=0;
L.listsize=0;
}

void ClearList(SqList &L){
//清空线性表
L.length=0;
}

Status ListEmpty(SqList L){
//判断线性表是否为空
if(L.length==0) return TRUE;
else return FALSE;
}

int ListLength(SqList L){
//返回线性表数据个数
return L.length;
}

Status GetList(SqList L,int i,ElemType &e){
//用e返回线性表第i个数据元素的值
if(i<1||i>L.length) return ERROR;
e=L.elem[i-1];
return OK;
}

int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)){
//在顺序线性表中查找第一个值与e满足compare()的元素的位序
//若找到则返回位序,否则返回0
int i=1;
ElemType *p=L.elem;
while(i<=L.length&&!(*compare)(*p++,e))
++i;
if(i<=L.length) return i;
else return 0;
}

Status ListInsert(SqList &L,int i,ElemType e){
//在顺序线性表L中第i个位置之前插入新的元素e
ElemType *p,*q,*newbase;
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L.length;
return OK;
}

Status ListDelete(SqList &L,int i,ElemType &e){
//在顺序线性表L中删除第i个元素,并用e返回其值
ElemType *p,*q;
if((i<1)||(i>L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L.length;
return OK;
}

int main()
{
SqList L;
ElemType e;
InitList(L);
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListDelete(L,1,e);
printf("%c\n%c\n",L.elem[1],e);
return 0;
}
yimingxinshou 2011-10-19
  • 打赏
  • 举报
回复
哎!自己结贴吧
# include<stdio.h>
# include<stdlib.h>
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
# define OVERFLOW -2
# define OK 1
# define ERROR 0
typedef int ElemType;

typedef struct Sqlist
{
ElemType *elem;
int length;
int listsize;
}Sqlist;

void main()
{
Sqlist *L,S;
L=&S;
int i,j,e,n;
int InitList_Sq(Sqlist *L,int n);
int ListInsert_Sq(Sqlist *L,int i,ElemType e);
int ListDelete_Sq(Sqlist *L,int i);
int PutList(Sqlist *L);
printf("输入表的长度:\n");
scanf("%d",&n);
InitList_Sq(L,n);
PutList(L);
printf("输入插入的位置:\n");
scanf("%d",&i);
printf("输入插入的值:\n");
scanf("%d",&e);
ListInsert_Sq(L,i,e);
PutList(L);
printf("输入删除的位置:\n");
scanf("%d",&j);
ListDelete_Sq(L,j);
PutList(L);
}

int InitList_Sq(Sqlist *L,int n)
{
int i;
ElemType *newbase;
L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)
exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
printf("请输入表中的数据:\n");
for(i=0;i<n;i++)
{
scanf("%d",&L->elem[i]);
++L->length;
if(L->length>L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
}
return OK;
}

int ListInsert_Sq(Sqlist *L,int i,ElemType e)
{
ElemType *p,*q,*newbase;
if(i<1||i>L->length+1)
return ERROR;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&L->elem[i-1];
for(p=&L->elem[L->length-1];p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
return OK;
}

int ListDelete_Sq(Sqlist *L,int i)
{
ElemType *p,*q;
int e;
if(i<1||i>L->length)
return ERROR;
p=&L->elem[i-1];
e=*p;
q=&(L->elem[L->length-1]);
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
printf("删除的元素为:\n%d\n",e);
return 0;
}

int PutList(Sqlist *L)
{
int *p,*q;
p=L->elem;
q=L->elem+(L->length-1);
printf("线性表中元素为:\n");
for(p=L->elem;p<=q;++p)
{
printf("%d ",*p);
}
printf("\n表长为:%d \n",L->length);
return OK;
}
yimingxinshou 2011-10-18
  • 打赏
  • 举报
回复
给我说一下怎样初始化线性表也行啊

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧