順序表的建立和刪除
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define ElemType int
#define MAXSIZE 100 /*此處的宏定義常量表示線性表可能達到的最大長度*/
typedef struct
{
ElemType elem[MAXSIZE]; /*線性表佔用的數組空間*/
int last; /*記錄線性表中最後一個元素在數組elem[ ]中的位置(下標值),空表置爲-1*/
}SeqList;
void initial(SeqList *v) //初始化線性表
{//初始化線性表
int i;
printf("請輸入初始線性表長度:n="); //輸入線性表初始化時的長度
scanf("%d",&v->last);
printf("請輸入從1到%d的各元素\n",v->last);
getchar();
for(i=0;i<v->last;i++) scanf("%d",&v->elem[i]); //輸入線性表的各元素
v->last--;
}
int InsList(SeqList *L,int i,ElemType e) //在線性表中插入元素
{
int k;
if(i<1||(i>L->last+2))
{
printf("插入位置i值不合法");
return(ERROR);
}
if(L->last>=MAXSIZE-1)
{
printf("表已滿,無法插入");
return(ERROR);
}
for(k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);
//實驗完成該部分的內容
}
int DelList(SeqList *L,int i,ElemType *e)
/*在順序表L中刪除第i個數據元素,並用指針參數e返回其值。i的合法取值爲1≤i≤L.last+1 */
{
int k;
if(i<1||(i>L->last+2))
{
printf("刪除位置不合法!");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;k<=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);
//實驗完成該部分的內容
}
int Locate(SeqList L, ElemType e)
{
int i;
i=0;
while((i<=L.last)&&(L.elem[i]!=e))
i++;
if(i<=L.last)
return(i+1);
else
return(-1);
//實驗完成該部分的內容
}
void print(SeqList S)
{
int i;
for(i=0;i<=S.last;i++)
printf("%5d",S.elem[i]);
printf("\n");
}
void main()
{SeqList S; //S爲一線性表
int loc,flag=1;
char j;
int ch;
int temp;
printf("本程序用來實現順序結構的線性表。\n");
printf("可以實現查找、插入、刪除等操作。\n");
initial(&S); //初始化線性表
while(flag)
{ printf("請選擇:\n");
printf("1.顯示所有元素\n");
printf("2.插入一個元素\n");
printf("3.刪除一個元素\n");
printf("4.查找一個元素\n");
printf("5.退出程序 \n");
scanf(" %c",&j);
switch(j)
{case ’1’:print(S); break; //顯示所有元素
case ’2’:{printf("請輸入要插入的元素和插入位置:\n");
printf("格式:數據,位置;例如:a,2\n");
scanf(" %d,%d",&ch,&loc); //輸入要插入的元素和插入的位置
temp=InsList(&S,loc,ch); //插入
if(temp==ERROR) printf("插入失敗!\n"); //插入失敗
else {printf("插入成功!\n"); print(S);} //插入成功
break;
}
case ’3’:{printf("請輸入要刪除元素的位置:");
scanf("%d",&loc); //輸入要刪除的元素的位置
temp=DelList(&S,loc,&ch); //刪除
if(temp==OK) printf("刪除了一個元素:%d\n",ch); //刪除成功
else printf("該元素不存在!\n"); //刪除失敗
print(S);
break;
}
case ’4’:{printf("請輸入要查找的元素:");
scanf(" %d",&ch); //輸入要查找的元素
loc=Locate(S,ch); //定位
if(loc!=-1) printf("該元素所在位置:%d\n",loc); //顯示該元素位置
else printf("%c 不存在!\n",ch);//當前元素不存在
break;
}
default:flag=0;printf("程序結束,按任意鍵退出!\n");
}
}
getchar();
}