学数据结构时在实现顺序表创建插入删除操作中,书中提供了伪代码,但是用c实现时在创建相应函数时,不能用&调用表的另一个名字。所以应该这样实现
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct //结构体
{
int *elem;//基地址
int length;长度
int listsize;//容量
}SqList;
int Initlist(SqList *L)//创建线性表 此处只能用*L,不能用&L,c中不能用&L并且*L为指针类型,需要用->实现
{
L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!(L->elem))
return 0;
L->length=0;
L->listsize=LIST_INIT_SIZE;
return 1;
}
//插入
int ListInsert_Sq(SqList *L,int i,int e)
{
if(i<1||i>(L->length)+1)
return 0;
int * newbase;
int * p,* q;
if(L->length>=L->listsize)
{
newbase=(int *)realloc(L->elem, (L->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)
return 0;
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);//q为第i个元素的位置
for(p=&(L->elem[(L->length)-1]);p>=q; --p)
*(p+1)=*p;//i-1之后的元素依次后移一位
*q=e;
++(L->length);
return 1;
}
//删除
int ListDelete_Sq(SqList* L,int i,int e)
{
int *p,*q;
if(i<1||i>L->length)
return 0;
p=&(L->elem[i-1]);
*p=e;
q=L->elem+(L->length)-1;
for(p;p<q;p++)
{
*p=*(p+1);
}
(L->length)--;
return 1;
}
void main()
{
SqList L;
Initlist(&L);
int i;
printf("input 10 interger");
for(i=0;i<10;i++)
{
scanf("%d",&(L.elem[i]));
printf("\t");
L.length++;
}
printf("insert later\n");
ListInsert_Sq(&L,5,10000);
for(i=0;i<L.length;i++)
{
printf("\t%d\t",L.elem[i]);
printf("\n");
}
printf("delete later\n");
for(i=0;i<L.length;i++)
{
if(L.elem[i]==8)
ListDelete_Sq(&L,i+1,8);
}
for(i=0;i<L.length;i++)
{
printf("\t%d\t",L.elem[i]);
}
}
此为本人第一次写,在学数据结构时有些小感悟,如有错误,希望各位前辈指教,小辈不胜感激