线性表基本操作

来源:互联网 发布:数据挖掘的功能 编辑:程序博客网 时间:2024/05/17 22:55
#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE   10 //初始分配量#define LISTINCREMENT   5  //分配增量typedef int ElemType;typedef  struct{    ElemType *elem;//存储空间基址    int length; //当前长度    int ListSize; //当前分配的存储} sqlist;int InitList_sq(sqlist *l)  /*initial the list l*///形参是一个结构体指针{  l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//初始化十个int容量  if(!l->elem) // if l->elem == NULL 前面有个!就代表if里的值为true   {      printf("无法分配空间!");      return 1;   }  else   {      l->length=0;//当前长度置为0      l->ListSize=LIST_INIT_SIZE;      //printf("ok\n");      return 0;   }}int ListInsert_sq(sqlist &l, int i, int e)//增{    //线性表l第i个位置前插入e    //从i起到最后一个向后移一位,注意先从最后一个开始移    ElemType *p, *q;    if(i < 1 || i > l.length + 1)//插入位置有误        return 0;    if(l.length >= l.ListSize)//存储空间已满,增加空间    {        ElemType *newelem = (ElemType *)realloc(l.elem,(l.ListSize+LISTINCREMENT) * sizeof(ElemType));        if(!newelem)        {            exit(0);        }        l.elem = newelem;//更新基址        l.ListSize += LISTINCREMENT;//更新分配量    }    q = &(l.elem[i-1]); //q是插入位置    for(p = &(l.elem[l.length-1]); p >= q; p--)    {        *(p+1) = *(p);    }    *q = e;    l.length++;    return 1;}int Delete_sq(sqlist &l, int i, ElemType &e)//删{    ElemType *q, *p;    if(i < 1 || i > l.length || l.length == 0) //删除位置有误或者l是个空表        return 0;    p = &(l.elem[i-1]);//删除元素的位置    e = *p;    q = &(l.elem[l.length - 1]);//最后一个元素    for(;p < q;p++)    {        *(p) = *(p+1);    }    l.length--;    return 1;}int FindValue_sq(sqlist &l, ElemType e)//查按值{    int j;    if(l.length == 0)        return 0;    for(int i = 0; i < l.length; i++)    {        if(l.elem[i] == e)        {            j = i;            break;        }    }    if(i >= l.length)    {        printf("线性表中无这个值\n");        return 0;    }    return j+1;}int FindIndex_sq(sqlist &l, int i, ElemType &e)//查 按位置{    if(i <= 0 || i >= l.length-1)    {        printf("查找位置有误\n");        return -1;    }    e = l.elem[i-1];    return e;}void change(sqlist &l, int i, ElemType &e){    if(i <= 0 || i >= l.length-1)        return;    l.elem[i-1] = e;}void show(sqlist &l)//显示{    for(int i = 0; i < l.length; i++)    {        printf("%d ",l.elem[i]);    }    printf("\n");}void ui(){    printf("    欢迎进入顺序表操作界面\n");    printf("  1.插入数据\n");    printf("  2.删除数据\n");    printf("  3.修改数据\n");    printf("  4.查找数据\n");    printf("  5.显示数据\n");    printf("  6.退出程序\n");}void FindUi(){    printf("  1.按位置查找\n");    printf("  2.按值查找\n");    printf("  3.返回\n");}int main(){    sqlist L;    int i, j,k, select;    int e;    InitList_sq(&L);    for(i = 1; i <= 10; i++)    ListInsert_sq(L,i,11-i);//第i个插入i    while(1)    {        ui();        scanf("%d",&select);        if(select == 1)        {            show(L);            fflush(stdin);            //system("cls");            printf("请输入要插入的位置:");            scanf("%d",&i);            printf("请输入插入的值:");            scanf("%d",&e);            ListInsert_sq(L,i,e);//第i个插入i            printf("数据已插入\n");            show(L);            fflush(stdin);            printf("按任意键返回\n");            getchar();            system("cls");        }        else if(select == 2)        {            show(L);            fflush(stdin);            printf("请输入删除的位置:");            scanf("%d",&i); //删除第i个数            Delete_sq(L,i,e);            printf("数据已删除\n");            show(L);            fflush(stdin);            printf("按任意键返回\n");            getchar();            system("cls");        }        else if(select == 3)        {            show(L);            fflush(stdin);            printf("请输入要修改的位置:");            scanf("%d",&i);            printf("请输入修改后的值:");            scanf("%d",&e);            change(L, i, e);            printf("数据已修改\n");            show(L);            fflush(stdin);            printf("按任意键返回\n");            getchar();            system("cls");        }        else if(select == 4)        {            while(1)            {                int find_select;                system("cls");                FindUi();                scanf("%d",&find_select);                fflush(stdin);                if(find_select == 1)                {                    show(L);                    scanf("%d",&i); //查找第i个数                    e = FindIndex_sq(L,i,e);                    if(e!=-1)                    printf("%d\n",e);                    fflush(stdin);                    printf("按任意键返回\n");                    getchar();                    //system("cls");                }                else if(find_select == 2)                {                    show(L);                    scanf("%d",&e);                    j = FindValue_sq(L,e);                    printf("%d\n",j);                    fflush(stdin);                    printf("按任意键返回\n");                    getchar();                    //system("cls");                }                else                 {                    system("cls");                    break;                      }            }        }        else if(select == 5)        {            fflush(stdin);            show(L);            printf("按任意键返回\n");            getchar();            system("cls");        }        else        {            return 0;        }    }}
0 0
原创粉丝点击