1. 程式人生 > >【資料結構】線性表的順序儲存完整程式

【資料結構】線性表的順序儲存完整程式

資料結構,線性表的順序儲存完整程式

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<iostream.h>
#define LIST_INIT_SIZE 100
#define LISTNCREMENT 10
typedef struct  {
    int *elem;
    int length;
    int listsize;
}Sqlist;

Sqlist InitSList();
void DeleteSList(Sqlist &L,int
i); void InsertSList(Sqlist &L,int i,int e); void FindList(Sqlist L,int i); void InverseList(Sqlist L); void Print(Sqlist L); void main() { int i; Sqlist L; L=InitSList(); L.length=5; for(i=0;i<L.length;i++) L.elem[i]=i; printf("original list:\n"); Print(L); // printf("請輸入表長: \n");
// scanf("%d",&L.length); // printf("表中的元素是:\n"); // for(i=0;i<L.length;i++) // scanf("%d",&L.elem[i]); cout<<"~~~~~~~~~~~~~~~~~~~~~~分割線~~~~~~~~~~~~~~~~~~~~~"<<endl; cout<<"請選擇:\n"; cout<<"1.插入元素:\n"; cout<<"2.刪除元素:\n"; cout<<"3.查詢元素:\n"
; cout<<"4.順序表逆置:\n"; int c,n,e; cin>>c; switch(c) { case 1: cout<<"請輸入插入元素的位置n:\n"; cin>>n; cout<<"請輸入插入的元素n:\n"; cin>>e; InsertSList( L,n,e); Print(L); break; case 2: cout<<"請輸入刪除元素的位置n:\n"; cin>>n; DeleteSList(L,n); Print(L); break; case 3: cout<<"請輸入查詢元素的位置:\n"; cin>>n; FindList(L,n); break; case 4: InverseList(L); break; default: printf("ERROR"); } // DeleteSList(L,2); // Print(L); /// InsertSList( L,2,88); // Print(L); // FindList(L,4); // InverseList(L); } /***********建立順序表**********/ Sqlist InitSList() { Sqlist L; L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L.elem) exit(0); L.length=0; L.listsize=LIST_INIT_SIZE; return L; } /***************刪除元素************/ void DeleteSList(Sqlist &L,int i) { int *p,*q; if((i<1)||(i>L.length)) printf("ERROR"); p=&(L.elem[i-1]); q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; L.length--; } /**************插入元素*************************/ void InsertSList(Sqlist &L,int i,int e) { int *newbase; int *q,*p; if(i<1||i>L.length+1) printf("ERROR"); if(L.length>=L.listsize) { newbase=(int *)realloc(L.elem,(L.listsize+LISTNCREMENT)*sizeof(int)); if(!newbase) exit(0); L.elem=newbase; L.listsize+=LISTNCREMENT; } q=&(L.elem[i-1]); for(p=&(L.elem[L.length-1]);q<=p;p--) { *(p+1)=*p; } *q=e; L.length++; } /*************查詢元素********************/ void FindList(Sqlist L,int i) { int *p,e; // printf("請輸入查詢元素的位置:\n"); // scanf("%d",&i); p=&(L.elem[i-1]); e=*p; printf("請輸出該位置的元素:\n"); printf("%d",e); printf("\n"); } /*********************順序表逆置******************************/ void InverseList(Sqlist L) { int s,i; for(i=0;i<L.length/2;i++) { s=L.elem[i]; L.elem[i]=L.elem[L.length-i-1]; L.elem[L.length-i-1]=s; } cout<<endl; printf("新的順序表中的元素是:\n"); for(i=0;i<L.length;i++) { printf("%d",L.elem[i]); printf(" ") ;// cout<<" ~ " ; //有問題,printf和cout混用 } } void Print(Sqlist L) { for(int i=0;i<L.length;i++) { printf("%d",L.elem[i]); printf(" "); } printf("\n"); }