資料結構第2章上機實驗題2.1
阿新 • • 發佈:2018-12-24
問題描述:實現順序表的基本運算(1-12具體要求見課本P62),作為對已經學過的順序表的小revision~
原始碼:
list.h:
#include <stdio.h> #include <malloc.h> #define max 100 typedef char Elemtype; typedef struct list { char data[max]; int length; } Sqlist; void Initlist(Sqlist *&l); void Createlist(Sqlist *&l,Elemtype a[],int n); void Displist(Sqlist *l); int Listlength(Sqlist *l); bool Listempty(Sqlist *l); void Dispelement(Sqlist *l,int loc); void Disploc(Sqlist *l,Elemtype e); bool Insertelement(Sqlist *&l,int loc,Elemtype e); bool Deleteelement(Sqlist *&l,int loc,Elemtype &e); void Destroylist(Sqlist *&l);
fun.cpp:
#include <stdio.h> #include "list.h" void Initlist(Sqlist *&l) { l=(Sqlist *)malloc(sizeof(Sqlist)); l->length=0; } void Createlist(Sqlist *&l,Elemtype a[],int n) { int i; l=(Sqlist *)malloc(sizeof(Sqlist)); for(i=n-1;i>=0;i--) l->data[i]=a[i]; l->length=n; } void Displist(Sqlist *l) { int i; for(i=0;i<l->length-1;i++) printf("%c ",l->data[i]); printf("%c\n",l->data[l->length-1]); } void Dispelement(Sqlist *l,int loc) { int i; for(i=0;i<l->length;i++) { if(i==loc-1) printf("%c\n",l->data[i]); } } void Disploc(Sqlist *l,Elemtype e) { int i; int flag=0; //判斷是否找到,flag=1找到,flag=0未找到 for(i=0;i<l->length;i++) { if(l->data[i]==e) { flag++; printf("%d\n",i+1); } } if(flag==0) printf("未找到該元素\n"); } int Listlength(Sqlist *l) { return (l->length); } bool Listempty(Sqlist *l) { if(l->length!=0) return true; else return false; } bool Insertelement(Sqlist *&l,int loc,Elemtype e) { int i; if(loc<1 || loc>l->length+1 || l->length==max) return false; loc--; for(i=l->length;i>loc;i--) l->data[i]=l->data[i-1]; l->data[loc]=e; l->length++; return true; } bool Deleteelement(Sqlist *&l,int loc,Elemtype &e) { int i; if(loc<1 || loc>l->length+1) return false; loc--; e=l->data[loc]; for(i=loc;i<l->length-1;i++) l->data[i]=l->data[i+1]; l->length--; return true; } void Destroylist(Sqlist *&l) { free(l); }
main.cpp:
#include <stdio.h> #include "list.h" int main() { Sqlist *l; Elemtype a[5]={'a','b','c','d','e'}; //5個元素a,b,c,d,e Elemtype e; Initlist(l); //初始化順序表L printf("順序表已被初始化!\n"); if(Listempty(l)) //判斷順序表L是否為空 printf("此順序表不為空\n"); else printf("此順序表為空\n"); Createlist(l,a,5); //尾插法依次插入a,b,c,d,e printf("尾插法插入元素後輸出的順序表為:\n"); Displist(l); //輸出順序表L printf("此順序表長度為:"); printf("%d\n",Listlength(l)); //輸出順序表L長度 if(Listempty(l)) //判斷順序表L是否為空 printf("此順序表不為空\n"); else printf("此順序表為空\n"); printf("順序表L的第3個元素為:"); Dispelement(l,3); printf("元素a的位置為:"); Disploc(l,'a'); Insertelement(l,4,'f'); //在第4個元素位置上插入元素f printf("插入元素後的順序表為:\n"); Displist(l); //輸出順序表L Deleteelement(l,3,e); //刪除L的第3個元素 printf("刪除元素後的順序表為:\n"); Displist(l); //輸出順序表L Destroylist(l); //釋放順序表L printf("順序表已被銷燬!\n"); return 0; }
執行結果: