c語言——線性表之順序結構
阿新 • • 發佈:2018-12-08
#include <stdio.h> #include <stdlib.h> #include <conio.h> //線性表——順序儲存 #define LIST_INIT_SIZE 10 #define LISTINCREMENT 10 #define ERROR 0 #define OK 1 #define OVERFLOW -2 typedef struct{ int *elem; int length; int listsize; }Sqlist; int destroy(Sqlist *L); int disPlay_all(Sqlist *L); int InitList_Sq(Sqlist *L); int get_length(Sqlist *L); int ListInsert_Sq(Sqlist *L,int i,int e); int ListDelete_Sq(Sqlist *L,int i,int e); int InitList_Sq(Sqlist *L) { int i; L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L->elem) exit(OVERFLOW); L->length = 10; L->listsize = LIST_INIT_SIZE; for(i=0;i<L->length;i++) { L->elem[i]=i; } return OK; } int get_length(Sqlist *L) { return L->length; } int destroy(Sqlist *L) { L->length=0; } int ListInsert_Sq(Sqlist *L,int i,int e) { int *newbase,*q,*p; if(i<1||i>L->length+1) return ERROR; if(L->length>=L->listsize) { newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); L->elem = newbase; L->listsize+=LISTINCREMENT; } q=&(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p; *q =e; ++L->length; return OK; } int ListDelete_Sq(Sqlist *L,int i,int e) { int *p,*q; if(i<1||i>L->length) return ERROR; p=&(L->elem[i-1]); e=*p; q=L->elem+L->length-1; for(++p;p<=q;++p) *(p-1)=*p; --L->length; return OK; } int disPlay_all(Sqlist *L) { int i; for(i=0;i<L->length;i++) { printf("%d",L->elem[i]); printf(" "); } return OK; } int main() { Sqlist L; int get,e=0; int i,num; InitList_Sq(&L); printf("請輸入你要進行操作的序號\n"); printf("1.線性表置空\n"); printf("2.求線性表的長度\n"); printf("3.資料元素的插入操作\n"); printf("4.資料元素的刪除操作\n"); printf("5.顯示線性表中的全部元素\n"); printf("6.退出\n"); scanf("%d",&get); switch(get) { case 1: destroy(&L); break; case 2: printf("該線性表的長度為:%d\n",get_length(&L)); break; case 3: //在指定位置上插入指定的資料元素 printf("輸入你要插入的元素的位置(即在第i個元素之前插入)以及插入元素(逗號隔開)"); scanf("%d,%d",&i,&num); ListInsert_Sq(&L,i,num); printf("新的線性表是\n"); disPlay_all(&L); break; case 4: //刪除指定位置的資料元素 printf("請輸入你要刪除的元素的位置\n"); scanf("%d",&i); ListDelete_Sq(&L,i,e); printf("新的線性表是\n"); disPlay_all(&L); break; case 5: //顯示線性表的所有元素 disPlay_all(&L); printf("\n"); case 6: printf("退出\n"); break; default : printf("無此操作!\n"); break; } return OK; }