线性表的基本运算之顺序存储
- /*顺序表的实现*/
- #include<stdio.h>
- #include<malloc.h>
- #define MAXSIZE 100 /*线性表的容量*/
- typedef int datatype; /*线性表元素类型*/
- typedef struct
- {
- datatype data[MAXSIZE]; /*定义存储表中元素的数组*/
- int last;
- }SeqList;
- SeqList *Init_SeqList(); //顺序表初始化
- int Insert_SeqList(SeqList *L,int i,datatype x); //顺序表中的插入
- int Delete_SeqList(SeqList *L,int i); //顺序表中的删除
- int Location_SeqList(SeqList *L,datatype x); //顺序表中的查找
- void menu();
- void main()
- {
- int n,flag=1;
- SeqList *L;
- L=Init_SeqList();
- while(flag)
- {
- menu();
- scanf("%d",&n);
- switch(n)
- {
- case 1: L=Init_SeqList(); break;
- case 2:{ int i,x,success;
- printf("Please input i and x:\n");
- scanf("%d%d",&i,&x);
- success=Insert_SeqList(L,i,x);
- if(success==1)
- {
- for(i=0;i<=L->last;i++)
- {
- printf("%5d",L->data[i]);
- }
- }
- break;
- }
- case 3:{
- int i,success;
- printf("please input i:\n");
- scanf("%i",&i);
- success=Delete_SeqList(L,i);
- if(success==1)
- {
- printf("%5d",L->data[i]);
- }
- break;
- }
- case 4:{
- int x,success;
- printf("please input a value:\n");
- scanf("%d",&x);
- success=Location_SeqList(L,x);
- if(success==-1)
- {
- printf("sorry,there isn't this value!\n");
- }
- else
- {
- printf("Locate is:%d\nvalue=%5d",success+1,L->data[success]);
- }
- break;
- }
-
-
- case 0: flag=0;
- }
- }
- }
- SeqList *Init_SeqList()
- {
- SeqList *L;
- L=(SeqList *)malloc(sizeof(SeqList));
- L->last=-1;
- return L;
- }
- int Insert_SeqList(SeqList *L,int i,datatype x)
- {
- int j;
- if(L->last==MAXSIZE-1)
- {
- printf("表满"); return(-1); /*表空间已满,不能插入*/
- }
-
- if(i<0||i>L->last+1) //检查插入位置的正确性
- {
- printf("位置错"); return(0);
- }
- for(j=L->last;j=i-1;j--)
- L->data[j+1]=L->data[j];
- L->data[i-1]=x;
- L->last++;
- return(1);
- }
- int Delete_SeqList(SeqList *L,int i) //顺序表中的删除
- {
- int j;
- if(i<1||i>L->last+1)
- {
- printf("不存在第i个元素"); return(0);
- }
- for(j=i;j<L->last;j++)
- L->data[j-1]=L->data[j];
- L->last--;
- return(1); //删除成功
- }
- int Location_SeqList(SeqList *L,datatype x) //顺序表中的查找
- {
- int i=0;
- while(i<L->last&&L->data[i]!=x)
- i++;
- if(i>L->last) return -1;
- else return i;
- }
- void menu()
- {
- printf("\n");
- printf("1.初始化\n");
- printf("2.插入\n");
- printf("3.删除\n");
- printf("4.查找\n");
- printf("0.退出");
- printf("请选择:\n");
- }