房天下 > 房天下问答 > 业主生活 > 其他
  • 帮忙看下这个数据结构程序,求救高手帮忙,有关顺序查找的

    #include<stdio.h>int *CreatArray(){ int *num = new int; int n = -1; printf("\n请输入一组数字,输入-1结束输入:"); do{ n++; scanf("%d",&num[n]); }while(num[n] != -1); return num;}int CountNum(int R[]){ int i = 0; while(R[i] != -1) i++; return i;}int OrderSearch(int *num,int aim){ int i; for(i = 0;i < CountNum(num);i++){ if(num[i] == aim)break; } if(i == CountNum(num) - 1) { return -1; } return i;} void Show(int *num){ int m; for(m = 0;m < CountNum(num);m++){ printf("%d ",num[m]); }}int main(){ int *num; int aim; num = CreatArray(); printf("请输入要查找的目标元素:"); scanf("%d",&aim); OrderSearch(num,aim); Show(num);} 程序如图,输入一组数值后,再输入查找关键字后输出的是那组数值,求问为什么?请高手帮忙查下

    提问者:tongtong0607

    发布于2010-11-05

共1个回答
  • dragon8901 丨Lv 4
    给你我写的程序,是线性表和链表的操作。。。。 #define ListSize 100#include "string"using namespace std;#include "iostream"typedef char DataType;typedef struct{ DataType data[ListSize]; int length;}sqlist;typedef struct LNode { DataType data; struct LNode *next; } *LinkList;//链表void CreateListR(LinkList &L,string a,int n) { LinkList s,r;int i; L=(LinkList )malloc(sizeof(LNode)); L->next=NULL; r=L; for (i=0;i<n;i++) { s=(LinkList )malloc(sizeof(LNode)); s->data=a[i];r->next=s; r=s; } r->next=NULL; cout<<"创建成功!\n"; }void DispList(LinkList L){ LinkList p; p=L->next; while (p!=NULL) { printf("%c",p->data); p=p->next; } printf("\n"); }void ListInsert1(LinkList &L,int i,DataType e) { LinkList p=L; int j=0; while (j<i-1 && p!=NULL) { j++; p=p->next; } if (!p||j>i-1) { cout<<"插入失败(错误的输入)!\n"; return; } LinkList s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; cout<<"插入成功"<<"插入后的链表为:"; DispList(L);}void ListDelete(LinkList &L,int i,DataType &e) { int j=0; LinkList p=L,q; while (j<i-1 && p->next) { j++; p=p->next; } e=p->next->data; if (!(p->next)||j>i-1) cout<<"错误的输入!\n"; q=p->next; p->next=q->next; free(q); cout<<"删除成功!"<<"删除的元素为:"<<e<<"\n删除后的链表为:"; DispList(L); }void DeleteElem(LinkList &L,DataType e){ int i=0; LinkList p1; p1=L->next; while(p1) { i++; if(p1->data==e) break; p1=p1->next; } int j=0; LinkList p=L,q; while (j<i-1 && p->next) { j++; p=p->next; } e=p->next->data; if (!(p->next)||j>i-1) cout<<"错误的输入!\n"; q=p->next; p->next=q->next; free(q); cout<<"删除成功!"<<"改元素所在位置为:"<<i<<"\n删除后的链表为:"; DispList(L);}//--------------顺序表void InitList(sqlist &L,string str)//创建顺序表{ int strlength=str.length(); for(int count=0;count<strlength;count++) L.data[count]=str[count]; L.data[count]=0; L.length=strlength; cout<<"创建成功\n";}void locateelem(sqlist L,DataType b)//查找{ int i,flag=0; for(i=1;i<=L.length;i++) { if(L.data[i-1]==b) { flag=1; break; } } if(flag==0) cout<<"不存在该字符!\n"; if(flag==1) cout<<"该字符所在的位置为:"<<i<<endl;}void ListInsert(sqlist &L, int i, DataType b)//插入{ L.length++; if(i<1||i>L.length) { cout<<"插入位置不正确"<<endl; return; } if(L.length >=ListSize-1) { cout<<"溢出"<<endl; return; } else { for(int j=L.length-2;j>=i-1; j--) L.data[j+1]=L.data[j]; L.data[i-1]=b; cout<<"插入成功!插入后的字符串为:"; for(j=0;j<L.length;j++) cout<<L.data[j]; cout<<endl; }}void listdelete(sqlist &L,int i,DataType &b)//删除1(删除i位置的元素,并且用b返回删除的元素){ b=L.data[i-1]; int j; for(j=i;j<L.length;j++) { L.data[j-1]=L.data[j]; } L.length--; cout<<"删除成功!"<<"删除的字符为:"<<b<<" 删除后的字符串为:"; for(j=0;j<L.length;j++) cout<<L.data[j]; cout<<endl;}void listdelete2(sqlist &L,DataType b)//删除2(找到b元素,并将其删除){ int i,j=0,flag=0,x; for(i=1;i<=L.length;i++) if(L.data[i-1]==b) { flag=1; break; } x=i; for(j=i;j<=L.length;j++) { L.data[j-1]=L.data[j]; } L.length--; if(flag==1) { cout<<"删除成功!"<<"该元素所在位置为:"<<x<<"删除后的字符串为:"; for(j=0;j<L.length;j++) cout<<L.data[j]; cout<<endl; } if(flag==0) cout<<"不存在该元素,删除失败!\n";}void list(){ cout<<"*****************顺序表操作*****************\n"; cout<<"创建线性表:\n"; cout<<"请输入线性表的内容(字符串长度小于100)\n"; string str; cin>>str; sqlist list1; InitList(list1,str); int x=1; while(x){ cout<<"请输入序号选择你要执行的操作:\n"; cout<<"1.字符查找(只查找第一次出现的位置)\n"; cout<<"2.字符插入\n"; cout<<"3.删除已知位置的字符\n"; cout<<"4.删除已知字符(只删除第一个出现的)\n"; cout<<"5.返回主菜单.\n"; int choice; cin>>choice; switch(choice) { case(1):cout<<"请输入你要查找的字符:";char elema;cin>>elema;locateelem(list1,elema);break; case(2):cout<<"请输入你要插入的元素和插入的位置:";int num1;char elemb;cin>>elemb>>num1;ListInsert(list1, num1, elemb);break; case(3):cout<<"请输入你要删除的位置:";int num2;char elemc;cin>>num2;listdelete(list1,num2,elemc);break; case(4):cout<<"请输入你要删除的元素:";char elemd;cin>>elemd;listdelete2(list1,elemd);break; case(5):x=0;break; default:break; } }}void linklist(){ cout<<"创建链表:"<<"输入你要创建的链表的值:"; string a; cin>>a; int x=1; LinkList list2; CreateListR(list2,a,a.length()); while(x){ cout<<"请选择你需执行的操作:"; cout<<"\n1.插入字符 \n"<<"2.删除第i个字符 \n"<<"3.删除已知的字符\n"<<"4.返回主菜单.\n"; int choice; cin>>choice; switch(choice){ case(1):cout<<"请输入你需要插入的位置和字符:";int num1;char elem1;cin>>num1>>elem1;ListInsert1(list2,num1,elem1);break; case(2):cout<<"请输入你要删除的位置:";int num2;char elem2;cin>>num2;ListDelete(list2,num2,elem2);break; case(3):cout<<"请输入你要删除的元素:";char elem3;cin>>elem3;DeleteElem(list2,elem3);break; case(4):x=0;break; default:break; } }}int main(){ int x=1; while(x){ cout<<"请输入你要选择的操作类型:\n"; cout<<"1.顺序表\n2.链表\n3.结束\n"; int choice; cin>>choice; switch(choice) { case(1):list();break; case(2):linklist();break; case(3):x=0;break; default:cout<<"错误的输入!";break; } } return 0;}
    +1 2010-11-05 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。