#include<iostream> using namespace std; #define LIST_INIT_SIZE 100 #define LIST_INCREATMENT 10 const int OK=1; const int ERROR=0; typedef struct { char *elem; int ListSize; int length; }SqList; int List_Init_Sq(SqList &L) { L.elem=new char[LIST_INIT_SIZE]; if(!L.elem) exit(OVERFLOW); L.length=0; L.ListSize=LIST_INIT_SIZE; return OK; } int List_Display_Sq(SqList L) { for (int i = 0; i < L.length; i++) { cout<<L.elem[i]<<" "; } cout<<endl; return OK; } int List_Insert_Sq(SqList &L) { int i; char e; cout<<"请输入要插入的元素及其位置:"<<endl; cin>>e>>i; if(i<0||i>L.length) return ERROR; char *newbase; if(L.length >= L.ListSize) { newbase = (char *)realloc(L.elem,(L.ListSize+LIST_INCREATMENT)*sizeof(char)); if(!newbase) return ERROR; L.elem = newbase; L.ListSize+=LIST_INCREATMENT; } char *p,*q; p=&(L.elem[i-1]); q=&(L.elem[L.length-1]); while (q>=p) { *(q+1) = *q; q--; } *p = e; L.length++; cout<<"在第"<<i<<"个位置插入元素"<<e<<"的结果为:"<<endl; List_Display_Sq(L); return OK; } int List_Delete_Sq(SqList &L) { int i; char x; cout<<"请输入要删除的元素的位置:"<<endl; cin>>i; if(i<0||i>L.length) return ERROR; char *p,*q; p=&(L.elem[i-1]); q=&(L.elem[L.length-1]); x=*p; while(p<q) { *p=*(p+1); p++; } L.length--; cout<<"删除第"<<i<<"个位置的元素"<<x<<"后的结果为:"<<endl; List_Display_Sq(L); return OK; } int List_LocateElem_Sq(SqList L) { char e; cout<<"请输入要寻找的元素:"<<endl; cin>>e; int i = 0; while (i<(L.length-1) && L.elem[i]!=e) { i++; } if(i==0) cout<<"没找到."<<endl; else cout<<"元素"<<e<<"在位置"<<i+1<<"处"<<endl; return OK; } int main() { SqList L; int n; cout<<"正在初始化。。。"<<endl; List_Init_Sq(L); cout<<"请输入线性表的长度:"<<endl; cin>>n; cout<<"请输入各个元素:"<<endl; for(int i=0;i<n;i++) { cin>>L.elem[i]; L.length++; } cout<<"请选择操作:1、插入;2、删除;3、定位"<<endl; int c; cin>>c; switch (c) { case 1:List_Insert_Sq(L);break; case 2:List_Delete_Sq(L);break; case 3:List_LocateElem_Sq(L);break; default: break; } system("pause"); return OK; }
运行结果:
参考:http://blog.csdn.net/hackerain/article/details/5917952
线性表的创建、插入、删除和定位
最新推荐文章于 2021-11-13 00:15:06 发布