数组实现静态表
1.順序線性表的建立、插入、刪除及查找。
2.具體要求:
(1)建立含n個數據元素的順序表;
(2)可以在線性表的任意合法位置i插入一個數據元素;
(3)可以刪除線性表在任意合法位置i上的一個數據元素;
(4)可以刪除線性表中所有值為e的數據元素,并知道刪除了幾個這樣的元素;
(5)可以查找第i個位置的元素;
(6)可以查找值為e的元素在線性表中的第一個位置i;
(7)可以輸出該表中各元素的值;
(8)可以輸出順序表的長度(即數據元素的個數);
建立工程
Header Files:<SqList.h>
#ifndef SQLIST_H #define SQLIST_H#define MAXSIZE 30 //定義線性表的最大長度typedef int ElemType; //線性表中存放整型元素 typedef struct{ElemType elem[MAXSIZE]; //線性表int length; // length指示當前線性表的長度 }SqList;void initial(SqList &); //初始化線性表 void print(SqList &); //輸出函數 bool insert(SqList &,int,int); //插入元素 bool del(SqList &,int ,int & ); //刪除元素 int locate(SqList ,int ); //查找 #endifSourse Flies:
主函數文件:<main.cpp>
#include <stdio.h> #include <SqList.h> void main() {SqList S; //S為一線性表int loc,e,flag=1;char j;bool temp;initial(S); //初始化線性表while(flag) {printf("請選擇:\n");printf("1.顯示所有元素 2.插入一個元素 3.刪除一個元素 4.查找一個元素\n");printf(" 5.退出程序 \n");scanf(" %c",&j);switch(j){case '1':print(S); break; //顯示所有元素case '2':{printf("請輸入要插入的元素(一個字符)和插入位置:\n");printf("格式:位置,整數;例如:1,-2\n");scanf(" %d,%d",&loc,&e); //輸入要插入的元素和插入的位置temp=insert(S,loc,e); //插入if(temp==false) printf("插入失敗!\n"); //插入失敗else {printf("插入成功!\n"); print(S);} //插入成功break;}case '3':{printf("請輸入要刪除元素的位置:");scanf("%d",&loc); //輸入要刪除的元素的位置temp=del(S,loc,e); //刪除if(temp==true) printf("刪除了一個元素:%d\n",e); //刪除成功else printf("該元素不存在!\n"); //刪除失敗 print(S);break;}case '4':{printf("請輸入要查找的元素:");scanf(" %d",&e); //輸入要查找的元素loc=locate(S,e); //定位if(loc!=-1) printf("該元素所在位置:%d\n",loc+1); //顯示該元素位置else printf("%d 不存在!\n",e); //當前元素不存在break;}default:flag=0;printf("程序結束,按任意鍵退出!\n");}getchar();} }函數實現:<Sqlist.cpp>
#include "stdio.h" #include "SqList.h"void initial(SqList &v) //初始化線性表 {int i;printf("請輸入初始線性表長度:n="); //輸入線性表初始化時的長度scanf("%d", &v.length);printf("請輸入從1到%d的各元素(整數)\n",v.length);getchar();for(i=0; i<v.length; i++) scanf("%d",&v.elem[i]); //輸入線性表的各元素 }void print(SqList &v) {int i;for(i=0; i<v.length; i++) printf("%d\n",v.elem[i]); }bool insert(SqList &v,int loc,int e) //插入一個元素,成功返回True,失敗返回False {int i;if((loc<1)||(loc>v.length+1)){printf("插入位置不合理!\n"); //位置不合理return false;}else if(v.length>=MAXSIZE) //線性表已滿 { printf("線性表已滿!\n");return false;} else {for(i=v.length-1;i>=loc-1;i--)v.elem[i+1]=v.elem[i]; //其后元素依次后移v.elem[loc-1]=e; //插入元素v.length++; //線性表長度加一return true;} } bool del(SqList &v,int loc,int &e) { //刪除一個元素,成功返回True,并用ch返回該元素值,失敗返回Falseint j;if(loc<1||loc>v.length) return false; //刪除位置不合理 else {e=v.elem[loc-1]; //e取得該元素值for(j=loc-1;j<=v.length-1;j++) v.elem[j]=v.elem[j+1]; //其后元素依次前移v.length--; //線性表長度減一return true;} }int locate(SqList v,int e) { //在線性表中查找ch的位置,成功返回其位置,失敗返回-1int i=0;while(i<v.length&&v.elem[i]!=e) i++; //當前位置后移,直到找到為止if(v.elem[i]==e) return i; //找到當前元素else return(-1); }?
一般采用動態實現數據存儲。數組的好處,直接給出下標即可找到下標相應的數據。下標為零位置不再存儲數據。
?
轉載于:https://www.cnblogs.com/lcpholdon/p/4005266.html
總結
- 上一篇: Java进阶路线图
- 下一篇: 【原创】字符串工具类--找出单元字符串