顺序表 增删改操作

1.从键盘依次输入10个整数(彼此以若干空格隔开),在内存中建立一个顺序表。然后完成以下操作:
① 查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在顺序表中所处的位置,若不存在,则显示"Not Found"。
② 删除:输入一个表示欲删除整数的位置的整数i(注意i的合法性),在顺序表中删除该数,并保证删除后依然是顺序表。
③ 插入:输入一个欲插入位置i和欲插入元素e,将e插入到第i个整数之前(注意i的合法性)。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #define  MAXSIZE  30
  4 typedef int DataType;
  5 
  6 typedef  struct  node 
  7 {   
  8     DataType  data[MAXSIZE];
  9     int  length;
 10 } SeqList,* PSeqList;
 11 //typedef SeqList* PSeqList;
 12 
 13 
 14 PSeqList  Init_SeqList( );
 15 PSeqList  Create_SeqList(PSeqList PL);
 16 int Location_SeqList (PSeqList PL, DataType  x);
 17 int Delete_SeqList(PSeqList PL,int i );
 18 int  Insert_SeqList(PSeqList PL,int i,DataType  x);
 19 Print_SeqList(PSeqList PL);
 20 
 21 main()
 22 {
 23    int t=1;
 24    int op;
 25    DataType x;
 26    int flag;
 27    int l;
 28    PSeqList PL;
 29    
 30          
 31          while(t)
 32        {
 33             printf("



");
 34             printf("			---顺序表---
");
 35             printf("
			*******************************************");
 36             printf("
			*          1---初始化及创建                  *");
 37             printf("
			*          2---查找                  *");
 38             printf("
			*          3---删除                  *");
 39             printf("
			*          4---插入                 *");
 40             printf("
			*          0---退     出                  *");
 41             printf("
			*******************************************");
 42             printf("			请选择菜单号(0--4):");
 43             scanf("%d",&op);
 44             switch(op)
 45             {
 46    
 47     case 1:
 48         PL=Init_SeqList();//初始化顺序表
 49         PL=Create_SeqList(PL);
 50         printf("新创建的顺序表为:");
 51         Print_SeqList(PL);
 52         break;
 53         
 54     case 2:
 55         printf("查找
");
 56         printf("请输入待查找元素x
");
 57         scanf("%d",&x);//输入待查找数值
 58         Print_SeqList(PL);
 59         flag=Location_SeqList (PL,x);//调用查找函数
 60         if(!flag)
 61               printf("Not Found
");
 62         else
 63               printf("待查找的x在顺序表中的位置为%d
",flag);
 64         break;
 65 
 66     case 3:
 67         printf("删除
");
 68         printf("请输入待删除元素的位置l:
");
 69         scanf("%d",&l);
 70         Delete_SeqList(PL,l);//调用删除函数
 71         Print_SeqList(PL);
 72         break;
 73 
 74     case 4:
 75         printf("插入
");
 76         printf("请输入待插入元素的位置l:");
 77         scanf("%d",&l);
 78         printf("请输入待插入的元素x:");
 79         scanf("%d",&x);
 80         Insert_SeqList(PL,l,x);
 81         Print_SeqList(PL);
 82         break;
 83     case 0:
 84           t=0;
 85           printf("
			程序结束!
");
 86           break;
 87           
 88     default: 
 89         printf("
				输入错误!请重新输入!
");
 90         break;
 91 
 92    }
 93        
 94        }
 95 
 96 
 97 }
 98 
 99 
100 
101 PSeqList  Init_SeqList(void)
102 {  /*创建一顺序表,入口参数无,返回一个指向顺序表的指针,指针值为零表示分配空间失败*/
103    PSeqList  PL;
104    PL=( PSeqList )malloc(sizeof(SeqList)); 
105    if (PL)       /*若PL=0表示分配失败*/
106         PL->length=0;     
107    return (PL);
108 } 
109 
110 PSeqList  Create_SeqList(PSeqList PL)
111 {
112        int i,n;
113        printf("请输入需初始化的元素个数
");
114        scanf("%d",&n);
115        printf("请输入%d个整数,中间用空格隔开:
",n);
116        for(i=0;i<n;i++)//输入10个整数
117        { 
118            scanf("%d",&PL->data[i]);
119            PL->length++; 
120        }
121        return (PL);
122 
123 
124 }
125 
126 int Location_SeqList (PSeqList PL,DataType  x)
127 {  /*顺序表检索,入口参数:为顺序表指针,检索元素,返回元素位置,-1表示表不存在,0表示查找失败*/
128     int i;
129     if (! PL) 
130     {  
131        printf("表不存在"); 
132        return(-1); /*表不存在,不能检索*/
133      } 
134    i=0;
135    while (i<PL-> length && PL->data[i]!= x)
136              i++;
137    if (i>=PL-> length)             
138        return 0;
139    else              
140        return (i+1);  
141 
142 }
143 
144 int Delete_SeqList(PSeqList PL,int i)
145 {  /*顺序表删除,入口参数:顺序表指针,删除元素位置,返回标志1表示成功,0表示删除位置不合法,-1表示表不存在*/
146     int  j;
147     if (! PL)
148     { 
149        printf("表不存在"); 
150        return(-1);    /*表不存在,不能删除元素*/
151     }
152     if(i<1 || i> PL -> length)  /*检查删除位置的合法性*/
153     {  
154         printf ("删除位置不合法"); 
155         return(0);
156     } 
157     //*x= PL ->data[i-1];
158     for(j=i;j< PL -> length; j++)
159          PL ->data[j-1]=PL ->data[j];    //向上移动
160     PL-> length --;    
161     return (1);        /*删除成功*/
162 } 
163 
164 int  Insert_SeqList(PSeqList PL,int i,DataType  x)
165 {   /*顺序表插入,入口参数:顺序表指针,插入位置,插入元素,返回标志,1表示成功,0表示插入位置不合法,-1表示溢出,-2表示表不存在*/
166      int j;
167      if (!PL)
168      {
169            printf("表不存在");
170            return(-2);      /*表不存在,不能插入*/
171       }  
172      if (PL-> length >= MAXSIZE)
173      { 
174           printf("表溢出"); 
175           return (-1);       /*表空间已满,不能插入*/
176      } 
177 
178      if(i<1||i>PL->length+1)
179      {
180       printf("插入位置不合法"); 
181       return(0); 
182      } 
183 
184      for(j= PL->length-1;j>=i-1;j--) 
185           PL->data[j+1]= PL ->data[j];   //移动元素
186      PL->data[i-1]=x;//PL->data[i-1]=x;  
187      PL->length++;
188      return (1);
189 } 
190 
191 Print_SeqList(PSeqList PL)
192 {
193     int i;
194     if(!PL)
195     {
196         printf("无此顺序表");
197         return -1;
198     }
199     if(PL->length==0)
200     {
201         printf("空表");
202         return 0;
203     }
204 
205     printf("顺序表的长度为%d",PL->length);
206     printf("顺序表的各元素值为:");
207     for(i=0;i<=PL->length-1;i++)
208         printf("%4d",PL->data[i]);
209     return 1;
210 
211 }
原文地址:https://www.cnblogs.com/panxinqi/p/6586686.html