數據結構--順序表的建議和刪除


順序表的建立和刪除





#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();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章