如何在顺序线性表中实现插入(C语言)
如何在顺序线性表中实现插入(C语言).向空线性表输入4/7/8三个数,要求输出存放在线性表中的值。请符上上机程序。 问题点数:10、回复次数:1Top
1 楼mylove0618(ADT)回复于 2002-05-16 17:27:37 得分 10
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define MAXLENGTH 255
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define LISTINCREMENT 10
typedef int status;
typedef struct{
int *elem;
int length;//表示表中元素数目
int listsize;//表示表的长度
}SqList;
status InitList(SqList* list){
list->elem=(int*)malloc(MAXLENGTH*sizeof(int));
if(!list->elem)exit(OVERFLOW);
list->length=0;
list->listsize=MAXLENGTH;
return OK;
}
status InsertList(SqList* list,int i,int e){
int *newbase;//一旦表不够长,重新申请空间所用
int *p,*q;
if((i<1)||(i>list->length+1)) return ERROR;//插入位置不能为0或负,也不能大于表长
if(list->length>=list->listsize){
newbase=(int *)realloc(list->elem,(list->listsize+LISTINCREMENT) *sizeof(int));
if(!newbase)exit(OVERFLOW);
list->elem=newbase;
list->listsize+=LISTINCREMENT;
}
q=(list->elem)+i-1;
for(p=list->elem+list->length-1;p>=q;p--) *(p+1)=*p;
*q=e;
++list->length;
return OK;
}
void PrintList(SqList* list){
int i;
printf("\nNOW begin to print :\n");
for(i=0;i<list->length;i++){
if(i%8==0)printf("\n");
printf("%5d",list->elem[i]);
}
printf("\n\nThe program has printed the result.\n");
}
void main(){
SqList *list=(SqList*)malloc(sizeof(SqList));
int location,value;//location表示插入位置,value表示插入值
char yn;//判断是否继续插入
system("cls");//清屏
printf("\nThis is a list program .\n");
InitList(list);
InsertList(list,1,4);
InsertList(list,2,7);
InsertList(list,3,8);
PrintList(list);
for(;;){
printf("\nWould you like to insert some datas?('y' or 'n')\n");
scanf("%c",&yn);
getchar();
if(yn=='y'){
printf("\nThe location ?\n");
scanf("%d",&location);
printf("\nThe value?\n");
scanf("%d",&value);
InsertList(list,location,value);
}
else break;
}
printf("\nWe'll print the list at last :\n");
PrintList(list);
free(list);
printf("\nThe program end .\n");
getch();
}
已经在vc下运行通过。
Top




