标签: 杂谈 |
#include "stdio.h"
#include "malloc.h"
#include "process.h"
#include "string.h"
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct{
ElemType *elem;
int length;
int listsize;
}List;
Status InitList(List &L)
{
//构造一个空的线性表。
L.elem=(ElemType * ) malloc(LIST_INIT_SIZE * sizeof(ElemType));
//if(!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize=LIST_INIT_SIZE;
printf("初始化一个线性表\n\n");
return OK;
}//InitList
Status DestroyList(List &L){
if(L.elem) free(L.elem); // 释放分配的存储空间
L.elem=NULL;
L.length=0;
L.listsize=0;
printf("销毁表!\n\n");
return OK;
}//DestroyList
Status GetElem (List L, int i, ElemType &e){
if(i<1||i>L.length+1) return ERROR; //i值不合法
e=L.elem[i -1];
return OK;
}// GetElem
Status ListInsert(List &L,int i,ElemType e){
ElemType *q,*p,*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) return(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;
}// ListInsert
Status ListDelete(List &L,int i,ElemType &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;
}// ListDelete
void main()
{
List L;
ElemType e1,e2;
Status k;
int i,a,b,c,d,e,n,j;
//初始化线性表L
InitList(L);
printf("初始化表元素个数:");
scanf("%d",&n);
//往线性表插入数据
for(i=1;i<=n;i++)
{
printf("输入所插入的数据:");
scanf("%d",&a);
ListInsert(L,i,a);
}
// 将表L中的第b个元素的值赋给e
for(j=1;j<2;)
{
printf("请选择您要进行的操作:1 :插入 2:取元素 3:删除 4:销毁\n");
scanf("%d",&c);
if(c==1)
{
printf("请输入插入元素的位置及元素:");
scanf("%d %d",&d,&e);
ListInsert(L,d,e);
printf("线性表元素总数为%d\n",n+1);
n++;
for(i=1;i<=n;i++)
{printf("%d \n",L.elem[i-1]);}
}
if(c==2)
{
printf("输入要取数的位数:");
scanf("%d",&b);
if(b<1||b>L.length)
{printf("输入错误!!!\n");
continue ;}
GetElem(L,b,e1);
if(k=ERROR)
printf("读取数据失败,",b);
else
printf("第%d个元素的值为%d\n",b,e1);
}
//删除元素
if(c==3)
{
printf("输入删除第几个数:");
scanf("%d",&c);
if(c<1||c>L.length)
printf("输入错误!!!元素不存在\n");
k=ListDelete(L,c,e2); // 删除第c个数据
if(k==ERROR) // 表中不存在第c个数据
printf("删除第%d个元素失败\n ",c);
else // 表中存在第c个数据,删除成功,其值赋给e2
printf("删除第%d个元素成功,其值为%d\n\n",c,e2);
}
//销毁表
if(c==4)
{ j++;
DestroyList(L);
printf("销毁L后,L.length=%d,L.listsize=%d,L.elem=%u\n\n",L.length, L.listsize, L.elem);}
}
}