天天看點

線性表的建立和操作

//對順序表的操作

#include<stdio.h>

#include <stdlib.h>

#include<malloc.h>

#define MAXSIZE   1000

typedef char ElemType;

typedef struct

{

 ElemType data[MAXSIZE];

 int length;

}SqList;

//初始化線性表

void InitList(SqList*&L)

 L=(SqList*)malloc(sizeof(SqList));

 L->length=0;

}

//銷毀線性表

void DestoryList(SqList*&L)

 free(L);

//判斷線性表是否為空

int ListEmpty(SqList*L)

 return(L->length==0);

//插入資料元素,起始位置為1

int ListInsert(SqList*&L,int Position,ElemType item)

 int j;

 if(Position<1||Position>L->length+1)

 {

  printf("元素插入失敗,請檢查輸入的位置是否有錯!\n");

  return 0;

 }

 Position--;

 for(j=L->length;j>Position;j--)

  L->data[j]=L->data[j-1];

 L->data[Position]=item;

 L->length++;

 printf("元素插入成功\n");

 return 1;

//替換第Position個元素的值

int ListReplace(SqList*&L,int Position,ElemType item)

 if(Position<1||Position>L->length)

  printf("元素位序号錯誤! \n");

 printf("元素存放成功!\n");

//删除資料元素

int ListDelete(SqList*&L,int Position,ElemType &item)

  printf("輸入的位号有誤!\n");

 Position --;

 item=L->data[Position];

 for(j=Position;j<L->length-1;j++)

 {L->data[j]=L->data[j+1];}

 L->length--;

//輸出線性表

void DispList(SqList *L)

 int i;

 if(ListEmpty(L))

  printf("表空!\n");

  return;

 for(i=0;i<L->length;i++)

  printf("%c ",L->data[i]);

 printf("\n");

//求線性表中某個資料元素值

int GetElem(SqList*L,int Position,ElemType&item)

 {return 0;}

 item=L->data[Position-1];

//求線性表的長度

int ListLength (SqList*L)

 return(L->length);

//按元素值查找

int LocateElem(SqList*L,ElemType item)

 int i=0;

 while(i<L->length&&L->data[i]!=item)i++;

 if(i>=L->length)

 else

  return i+1;

void clear()

 system("pause");

 system("cls");

void showmenu()

 printf("\n\n\n");

 printf("            --線性表的基本運算--           \n");

 printf("********************************************\n");

 printf("*     1---插入一個新元素到第i個位置        *\n");

 printf("*     2---删除第i個位置的元素              *\n");

 printf("*     3---存一個新元素到第i個位置          *\n");

 printf("*     4---顯示順序表中所有元素的值         *\n");

 printf("*     5---檢索表中第i個元素                *\n");

 printf("*     6---求表的長度                       *\n");

 printf("*                                          *\n");

 printf("*     0---退出                             *\n");

 printf("********************************************");

 printf("\n請選擇菜單号(0--6):");

void Charu()

 SqList*L;

 InitList(L);//建立一個順序表

 char choice='N';

 ElemType item;

 int Position;

 printf("請輸入一個新元素的值:");

 flushall();

 scanf("%c",&item);

 printf("請輸入插入的位置:");

 scanf("%d",&Position);

 ListInsert(L,Position,item);

void Shanchu()

 printf("請輸入要删除的元素的位置序号:");

 if(ListDelete(L,Position,item))

  printf("删除的元素為%c\n",item);

void Xiugai()

 printf("請輸入該元素的存放位置:");

 ListReplace(L,Position,item);

void Jiansuo()

 printf("請輸入元素的位序号:");

 if(GetElem(L,Position,item))

  printf("第%d個元素為:%c\n",Position,item);

  printf("輸入的位序号有誤!\n");

void LineOP()

 while(choice!='0')

  showmenu();

  flushall();

  scanf("%c",&choice);

  switch(choice)

  {

  case'1':

   Charu();

   clear();

   break;

  case'2':

   Shanchu();

  case'3':

   Xiugai();

  case'4':

   DispList(L);

  case'5':

   Jiansuo();

  case'6':

   printf("線性表的長度為%d",ListLength(L));

  case'0':

   printf("\n\t程式結束!\n");

   DestoryList(L);

  default:

   printf("\n\t選擇錯誤,請重新輸入!\n");

  }

int main()

 LineOP();

 return 0;

本文轉自蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366812,如需轉載請自行聯系原作者

繼續閱讀