帮忙看下这个数据结构程序,求救高手帮忙,有关顺序查找的
#include<stdio.h>int *CreatArray(){ int *num = new int;int n = -1;printf("\n请输入一组数字,输入-1结束输入:");do{ n++;scanf("%d",&num[n]);}whi... 展开
#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);} 程序如图,输入一组数值后,再输入查找关键字后输出的是那组数值,求问为什么?请高手帮忙查下 收起
其他答案
给你我写的程序,是线性表和链表的操作。。。。 #define ListSize 100#include "string"using namespace std;#include "iostream"typedef char DataType;typedef struct{ DataType data[ListSize];int length;}sqli 展开
给你我写的程序,是线性表和链表的操作。。。。 #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;} 收起
2010-11-05 23:43
来自北京市
赞(0)点赞赞(0)举报
发布评论
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。
回答成功


