程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 順序表

順序表

編輯:關於C語言

#include "stdio.h"
#include "stdlib.h" //該頭文件包含了realloc()函數、exit
#define List_Size 100
/**
**宏定義
*/
#define ListIncrement 10
#define OK 1
#define ERROR 0
#define OVERFLOW -1
/**
*typedef 聲明自定義數據類型
*/
typedef int ElemType;
typedef struct{
 ElemType *elem;
 int length;
 int listsize;
}SqList;
int InitSqList(SqList &L){//順序表的初始化
 L.elem=new ElemType[List_Size];
 if(!L.elem) exit(OVERFLOW);
 L.length=0;
 L.listsize=List_Size;
 return OK;
}
void CreateSqList(SqList &L,int n){//建立順序表
 int i;
 for(i=0;i<n;i++){
  scanf("%d",&L.elem[i]);
  L.length++;
 }
}
void DeastroySqList(SqList &L){//銷毀順序表,釋放內存空間
 delete L.elem;
}
int SqListInsert(SqList &L,int i,ElemType x){//插入操作    ///算法是比較重要的
 int j;
 ElemType *p;
 if(i<1||i>L.length+1) return ERROR;
 if(L.length>=L.listsize){
  p=(ElemType*)realloc(L.elem,(L.listsize+ListIncrement)*sizeof(ElemType));
  if(!p) exit(OVERFLOW);
  L.elem=p;
  L.listsize=L.listsize+ListIncrement;
 }
 for(j=L.length-1;j>=i-1;j--)
  L.elem[j+1]=L.elem[j];
 L.elem[i-1]=x;
 ++L.length;
 return OK;
}
int SqListDelete(SqList &L,int i){//刪除操作
 int j;
 if(i<1||i>L.length) return ERROR;
 for(j=i-1;j<L.length-1;j++)
  L.elem[j]=L.elem[j+1];
 L.length--;
 return OK;
 
}

int LocateElem(SqList L,ElemType x){//按值查找
 int i=1;
 while(i<=L.length&&L.elem[i-1]!=x) i++;
 if(i<=L.length) return i;
 else return ERROR;
}
void DispSqList(SqList L){//依次輸出線性表中的所有元素
 int i;
 for(i=0;i<L.length;i++)
  printf("%d\t",L.elem[i]);
 printf("\n");
}
void main(){
 SqList L;
 int i;
 ElemType x;
 InitSqList(L);//……
 printf("please input some messages!!!\n");
 CreateSqList(L,5);
 printf("Data to be showed!!!\n");
 DispSqList(L);
 printf("請輸入要插入的數:\n");
  scanf("%d",&x);
 printf("請輸入要插入位置:\n");
  scanf("%d",&i);
 while(!SqListInsert(L,i,x)){
   printf("插入位置越界!!!請輸入正確的插入位置:\n");
   scanf("%d",&i);
  }
 printf("插入成功!!!\n");
 DispSqList(L);
 
 printf("請輸入刪除數的位置:\n");
 scanf("%d",&x);
 while(!SqListDelete(L,x)){
  printf("刪除位置越界!!!請輸入正確的刪除數的位置:\n");
  scanf("%d",&x);
 }
 printf("刪除成功!!!\n");
 DispSqList(L);
 
 printf("請輸入要查找的數:");
 scanf("%d",&x);
 if(!LocateElem(L,x)){
  printf("沒有你要查找的數!!!");
 }else{
  printf("已查到你要找的數!!!\n");
  printf("該數在線性表中的位置:");
  printf("%d\n",LocateElem(L,x));
 }
 DeastroySqList(L);
}
 

 
作者“技術實驗室”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved