
:用C语言定义一个可扩展的顺序表结构,并实现初始化、求表长、插入、删除、查找操作。 40
展开全部
刚帮人调了一个程序,借花献佛,希望对你有帮助!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 1024
typedef char datatype;
typedef struct
{
datatype data[maxsize];
int last;
}sequenlist;
//在线性表L中第i个位置上插入元素e。
int ListInsert(sequenlist *L, int i, datatype e)
{
int j;
if( i < 1 || i > L -> last || L -> last >= maxsize )
return 0;
for ( j=L->last+1; j >=i; j-- )
L->data[j] =L->data[j-1];
L->data[i-1] = e;
L->last++;
return 1;
}
void DispList(sequenlist *L) //输出线性表L。
{
int j;
for(j=0; j<L->last; j++)
{
printf("%c",L->data[j]);
}
printf("\n"); //最后加个换行
}
int ListLength(sequenlist *L) //返回线性表L的长度。
{
return L->last;
}
int ListEmpty(sequenlist *L) //判断线性表L是否为空表。
{
if(L->last ==0 )
{
printf("线性表为空\n");
return 1; //为空,返回真值!
}
printf("线性表不为空\n");
return 0;
}
char GetElem(sequenlist *L, int i) //返回线性表L的第i个元素
{
if ( i > 0 && i <= L->last)
return L->data[i-1];
printf ( "参数 i:%d 不合理!\n" , i );
return 0;
}
//在线性表L查找元素e,若存在,则返回第一个e在线性表中的们置,若不存在,则返回0。
int LocateElem(sequenlist *L, datatype e)
{
int i = 0;
while ( i<L->last && L->data[i] != e )
i++;
if ( i < L->last )
return i+1;
else
return 0;
}
int ListDelete(sequenlist *L, int i) //在线性表L中删除第i个元素。
{
int j;
if ( i<1 || i> L->last)
{
printf ("error");
return 0;
}
for ( j = i; j <= (*L).last; j++ )
L->data[j-1] = L->data[j];
L->last --;
return 1;
}
void InitList(sequenlist *L) //初始化。
{
memset( L->data , 0 , sizeof(L->data) );
L->last = 0;
}
int main()
{
sequenlist *L=NULL;
char ch = 'a';
int k ;
//L指针在没有指定有效地址空间时,是不能直接使用的!不然它指向的是NULL不能操作
L=(sequenlist *)malloc( sizeof(sequenlist) ); //为指针分配一个有效的空间才可以用哦
InitList(L);
printf("插入a-j\n");
for(k = 0;k < 10 ; k++)
{
L->data[k] = ch;
ch ++;
L->last++ ;
}
printf("继续插入A B C D E\n");
ch = 'A';
for( k = 10; k <= 15 ; k ++)
{
L ->data[k] = ch;
ch ++;
L->last++ ;
}
DispList(L);
ListEmpty(L);
GetElem(L, 3);
LocateElem(L, 'A');
ListInsert(L, 4, 'X');
DispList(L);
ListDelete(L, 3);
DispList(L);
free(L);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 1024
typedef char datatype;
typedef struct
{
datatype data[maxsize];
int last;
}sequenlist;
//在线性表L中第i个位置上插入元素e。
int ListInsert(sequenlist *L, int i, datatype e)
{
int j;
if( i < 1 || i > L -> last || L -> last >= maxsize )
return 0;
for ( j=L->last+1; j >=i; j-- )
L->data[j] =L->data[j-1];
L->data[i-1] = e;
L->last++;
return 1;
}
void DispList(sequenlist *L) //输出线性表L。
{
int j;
for(j=0; j<L->last; j++)
{
printf("%c",L->data[j]);
}
printf("\n"); //最后加个换行
}
int ListLength(sequenlist *L) //返回线性表L的长度。
{
return L->last;
}
int ListEmpty(sequenlist *L) //判断线性表L是否为空表。
{
if(L->last ==0 )
{
printf("线性表为空\n");
return 1; //为空,返回真值!
}
printf("线性表不为空\n");
return 0;
}
char GetElem(sequenlist *L, int i) //返回线性表L的第i个元素
{
if ( i > 0 && i <= L->last)
return L->data[i-1];
printf ( "参数 i:%d 不合理!\n" , i );
return 0;
}
//在线性表L查找元素e,若存在,则返回第一个e在线性表中的们置,若不存在,则返回0。
int LocateElem(sequenlist *L, datatype e)
{
int i = 0;
while ( i<L->last && L->data[i] != e )
i++;
if ( i < L->last )
return i+1;
else
return 0;
}
int ListDelete(sequenlist *L, int i) //在线性表L中删除第i个元素。
{
int j;
if ( i<1 || i> L->last)
{
printf ("error");
return 0;
}
for ( j = i; j <= (*L).last; j++ )
L->data[j-1] = L->data[j];
L->last --;
return 1;
}
void InitList(sequenlist *L) //初始化。
{
memset( L->data , 0 , sizeof(L->data) );
L->last = 0;
}
int main()
{
sequenlist *L=NULL;
char ch = 'a';
int k ;
//L指针在没有指定有效地址空间时,是不能直接使用的!不然它指向的是NULL不能操作
L=(sequenlist *)malloc( sizeof(sequenlist) ); //为指针分配一个有效的空间才可以用哦
InitList(L);
printf("插入a-j\n");
for(k = 0;k < 10 ; k++)
{
L->data[k] = ch;
ch ++;
L->last++ ;
}
printf("继续插入A B C D E\n");
ch = 'A';
for( k = 10; k <= 15 ; k ++)
{
L ->data[k] = ch;
ch ++;
L->last++ ;
}
DispList(L);
ListEmpty(L);
GetElem(L, 3);
LocateElem(L, 'A');
ListInsert(L, 4, 'X');
DispList(L);
ListDelete(L, 3);
DispList(L);
free(L);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |