当前位置: 代码迷 >> 综合 >> 数据结构---顺序表
  详细解决方案

数据结构---顺序表

热度:46   发布时间:2023-11-11 10:54:38.0
 #include<bits/stdc++.h>using namespace std;typedef struct Node{int *elem;int  len;int listsize;}Sqlist;int initlist(Sqlist &L,int len)///初始化顺序表{if(len==0){len=100;}L.elem=(int *)malloc(len*sizeof(int));///申请空间if(!L.elem){return 0;}L.len=0;L.listsize=100;return 1;}int insertlist(Sqlist &L,int i,int e)///在i位置插入元素e{int *p,*q;if(i<0||i>L.len)///i值不合法{return 0;}if(L.len>=L.listsize)///空间不足{int *newbase = (int *)realloc(L.elem,(L.listsize+10)*sizeof(int));///重新申请空间if(!newbase){return 0;}L.elem=newbase;L.listsize+=10;}q=&L.elem[i];for(p=&L.elem[L.len];p>=q;p--){*p=*(p-1);///元素右移}*q=e;L.len++;return 1;}int deletelist(Sqlist &L,int e)///删除所有值为e的元素{int *p,*q;int i=0;while(i<L.len){if(L.elem[i]==e){q = &L.elem[i];for(p=q;p<&L.elem[L.len];p++){*p=*(p+1);///元素向左移动}L.len--;///长度减一}else{i++;}}}int deletelist2(Sqlist &L,int i)///删除第i个元素{int *p,*q;q=&L.elem[i-1];for(p=q;p<&L.elem[L.len];p++){*p=*(p+1);///元素向左移动}L.len--;///长度减一}int sortlist(Sqlist &L)///排序{sort(L.elem,L.elem+L.len);}int printlist(Sqlist &L)///打印{for(int i=0;i<L.len;i++){printf("%d ",L.elem[i]);}printf("\n");}int main(){int n;while(~scanf("%d",&n)){int num;Sqlist L;initlist(L,n);for(int i=0;i<n;i++){scanf("%d",&num);insertlist(L,i,num);}sortlist(L);printlist(L);int num2;scanf("%d",&num2);deletelist(L,num2);printlist(L);scanf("%d",&num2);deletelist2(L,num2);printlist(L);}return 0;}