- #include <stdio.h>
- #include <malloc.h>
- #define LIST_SIZE 100
- #define LISTINCREMENT 10
- typedef char ElemType;
- typedef struct
- {
- ElemType * elem;
- int length;
- int listsize;
- }SqList;
- SqList L;
- SqList *InitiaList()
- {
- L.elem = (ElemType *)malloc(LIST_SIZE * sizeof(ElemType));
- if (!L.elem)
- {
- printf("益处,扩展空间失败!");
- return 0;
- }
- L.length = 0;
- L.listsize = LIST_SIZE;
- return &L;
- }
- void DestoryList(SqList *L)
- {
- //此处如果写成free(L)会报错
- free(L->elem);
- }
- int ListInsert(SqList * L,int i,ElemType e)
- {
- int j;
- ElemType *newbase;
- //位置不合法
- if (i < 1 || i > L->length +1)
- {
- printf("位置不合法!");
- return 0;
- }
- //表满,申请额外空间
- if (L ->length == L->listsize)
- {
- newbase = (ElemType *)realloc(L->elem,
- (L->listsize+LISTINCREMENT)
- *sizeof(ElemType));
- if (!newbase)
- {
- printf("溢出,扩展空间失败!");
- return 0;
- }
- L->elem = newbase;
- L->listsize += LISTINCREMENT;
- }
- //将位序参数转化为数组下标
- i--;
- //后移元素
- for (j = L->length-1;j > i;j --)
- {
- L->elem[j+1] = L->elem[j];
- }
- //插入元素
- L->elem[i] = e;
- L->length++;
- return 1;
- }
- int ListDelete(SqList * L,int i)
- {
- int j;
- if (L->length == 0)
- {
- printf("这是个空表,无法删除!");
- return 0;
- }
- else
- {
- if (i <1 || i > L->length)
- {
- printf("输入位置不合法!");
- return 0;
- }
- }
- i--;
- for (j = i;j < L->length -1;j ++)
- {
- L->elem[j] = L->elem[j+1];
- }
- L->length--;
- return 1;
- }
- void ListTraverse(SqList * L)
- {
- int i;
- if (L->length == 0)
- {
- printf("空表!\n");
- }
- else
- {
- for (i = 0 ; i < L->length ; i++)
- {
- printf("%c",L->elem[i]);
- printf("\n");
- }
- }
- }
- void LocatElem(SqList * L,ElemType e,int f)
- {
- int i;
- switch(f)
- {
- case 0:
- for (i = 0; i < L->length; i ++)
- {
- if (L->elem[i] == e)
- {
- ++i;
- break;
- }
- }
- break;
- case 1:
- for (i = 0; i < L->length; i ++)
- {
- if (L->elem[i] < e)
- {
- ++i;
- break;
- }
- }
- break;
- case 2:
- for (i = 0; i < L->length; i ++)
- {
- if (L->elem[i] > e)
- {
- ++i;
- break;
- }
- }
- break;
- default:
- printf("参数错误!\n");
- }
- if (i <= L->length)
- {
- printf("所比较元素的关系位于第%d\n",i);
- }
- else
- {
- printf("不能比较!\n");
- }
- }
- void chose(int a)
- {
- int n,i,m;
- ElemType e;
- switch(a)
- {
- case 1:
- InitiaList();
- ListTraverse(&L);
- break;
- case 2:
- printf("请输入插入元素个数:");
- scanf(" %d",&n);
- for ( i = 0 ; i < n ; i ++)
- {
- printf("请输入插入的元素:");
- scanf(" %c",&e);
- printf("请输入插入的元素的位置:");
- scanf("%d",&m);
- ListInsert(&L,m,e);
- }
- ListTraverse(&L);
- break;
- case 3:
- printf("请输入删除元素个数:");
- scanf(" %d",&n);
- for ( i = 0 ; i < n ; i ++)
- {
- printf("请输入要删除的元素的位序:");
- scanf(" %d",&m);
- ListDelete(&L,m);
- }
- ListTraverse(&L);
- break;
- case 4:
- printf("请输入需要比较的元素:");
- scanf(" %c",&e);
- printf("请输入需要比较元素的关系(0为等于输入元素,1为小于输入元素,2为大于输入元素):");
- scanf("%d",&m);
- LocatElem(&L,e,m);
- ListTraverse(&L);
- break;
- case 5:
- DestoryList(&L);
- printf("释放顺序表成功!\n");
- break;
- default:
- printf("参数错误!\n");
- }
- }
- void main()
- {
- int a;
- printf("1.建立新表\n");
- printf("2.插入元素\n");
- printf("3.删除元素\n");
- printf("4.找出表中与输入元素e满足大于/小于/等于关系的第一个元素的位序\n");
- printf("5.释放顺序表\n");
- printf("0.结束程序\n");
- for ( a = 1 ; a != 0 ; )
- {
- printf("请输入需要操作对应的数字:");
- scanf("%d",&a);
- chose(a);
- }
- }
转载于:https://blog.51cto.com/591819849/1100764