求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢

编写一个有关顺序表的C语言程序,要求实现以下功能

(1)建立一个顺序表L=[21,23,14,5,56,17,31,85,72],并输出该表中各元素的值及顺序表的长度,然后在第i个位置插入元素68;

(2)对于给定的关键字K(K分别取17,45),实现顺序查找,返回查找成功或失败的信息。

(3)选择两种不同类型的排序方法实现对该顺序表的排序,使之成为有序表,对于给定的关键字K(K分别取17,45),实现折半查找,返回查找成功或失败的信息。

求高人指点,谢了

我写了一个完整的。程序试运行正常。运行效果如下图。
希望对您有帮助!

#include"stdio.h"
#include "stdlib.h"
int charu(int a[])
{
int n,i=0;
while(a[i]!=0)
i++;
printf("\n该数列长度为%d。\n",i);
printf("请输入要插入元素的位置n(n<=%d)(在第%d位插入即在末尾增加一个元素):\n",i+1,i+1);
while(1)
{
scanf("%d",&n);
if(n>=1&&n<=i+1)
break;
printf("请输入0-%d以内的数字:\n",i+1);
}
for(i=i-1;i>=n-1;i--)
a[i+1]=a[i];
printf("请输入要添加的数:\n");
scanf("%d",&a[n-1]);
printf("新数列为:\n");
for(i=0;a[i]!=0;i++)
printf("%d\t",a[i]);
return a[20];
}

void chazhao1(int a[])/*顺序查找*/
{
int n=0,num;
printf("请输入要查找的数:\n");
scanf("%d",&num);
for(int i=0;a[i]!=0;i++)
if(a[i]==num)
{
printf("第%d位为%d。\n",i,num);
n=n+1;
}
if(n==0)
printf("没找到该数!\n");

}
void chazhao2(int a[])/*折半查找*/
{
int num,set=0,end=0,i;
while(a[end]!=0)
end++;
end=end-1;
i=(set+end)/2;
printf("请输入要查找的数:\n");
scanf("%d",&num);
while(set<=end)
{
if(a[i]>num)
end=i-1;
else
if(a[i]<num)
set=i+1;
else break;
i=(set+end)/2;
}
if(set>end)
printf("没找到该数!\n");
else
printf("第%d位为%d。\n",i+1,num);
}

int paixu1(int a[])
{
int n=0;
for(int i=0;a[i]!=0;i++)
n=n+1;
for(i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
int t;
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
printf("排序后的数列为:\n");
for(i=0;a[i]!=0;i++)
printf("%d\t",a[i]);
return a[20];
}

int paixu2(int a[])
{
int n=0;
for(int i=0;a[i]!=0;i++)
n=n+1;
int min;
for(i=0;i<n-1;i++)
{
min=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[min])
min=j;
if(min!=i)
{
int t;
t=a[i];a[i]=a[min];a[min]=t;
}
}
printf("排序后的数列为:\n");
for(i=0;a[i]!=0;i++)
printf("%d\t",a[i]);
return a[20];
}

void xianshi(int a[])
{
for(int i=0;a[i]!=0;i++)
printf("%d\t",a[i]);
}

void screen()
{
printf("\n请选择:\n");
printf("1.显示所有数\n");
printf("2.插入一个数\n");
printf("3.顺序查找一个数\n");
printf("4.冒泡排序\n");
printf("5.选择排序\n");
printf("6.折半查找一个数(注意:折半查找只能在排序后使用)\n");
printf("7.退出程序\n");
}

void main()
{
int a[20]={21,23,14,5,56,17,31,85,72};
int i;
printf("原数列为:\n");
for(i=0;a[i]!=0;i++)
printf("%d\t",a[i]);
printf("\n该数列长度为%d。\n",i);
int c;
while(1)
{
screen();
scanf("%d",&c);
switch (c)
{
case 1:xianshi(a);break;
case 2:a[20]=charu(a);break;
case 3:chazhao1(a);break;
case 4:a[20]=paixu1(a);break;
case 5:a[20]=paixu2(a);break;
case 6:chazhao2(a);break;
case 7:exit(0);
default :printf("输入的数字错误。\n请重新输入:\n");
}
continue;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-26
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}Lnode,*linklist;

#define LEN sizeof(struct node)
Lnode * createlistS() //头插法
{
Lnode *h,*p,*q;
h = (Lnode*)sizeof(LEN);
h->next = NULL;
elemtype ch;
while ((ch==getchar()) != '\n')
{
p = (Lnode*)sizeof(LEN);
p->data = ch;
p->next = h->next;
h->next = p;
}
return h;
}

Lnode *createlistE() //尾插法
{
Lnode *h,*p,*t;
elemtype ch;
h = (Lnode*)sizeof(LEN);
h->next = NULL;
t = h;
while ((ch = getchar())!= '\n')
{
p = (Lnode*)sizeof(LEN);
p->data = ch;
p->next = NULL;
t->next = p;
t = p;
}
return h;
}
int lenlist(Lnode *h) //得到链表长度
{
Lnode *temp = h;
int i=0;
if (temp)
{
return i;
}
while (temp)
{
i++;
temp = temp->next;
}
return i;
}

void insert(Lnode *p,elemtype X) //在p中插入结点S
{
Lnode *S = (Lnode*)sizeof(LEN);
S.data = X;
S.next = p->next;
p->next = S;
}

int insert(Lnode *h,int i,elemtype X) //在第i个元素前插入一元素
{
Lnode *p,*s;
p = h->next;
int j = 1;
while (p && j<i-1)
{
++j;
p = p->next;
}
if (i>0 && j==i)//-1
{
s = (Lnode *)sizeof(LEN);
s->data = X;
s->next = p->next;
p->next = s;
return 1;
}
else
return 0;
}

void deletenode(Lnode *p) //从p中删除结点q
{
Lnode *q;
if (p->next != NULL)
{
q = p->next; //使得q为p的直接后继
p->next = q->next; //先保存p后继结点的后继,删除p后面的直接后继结点q
free(q); //释放空间
}
}

Lnode* findNode(Lnode*h,elemtype X) //查找指定元素并返回该结点指针
{
Lnode *temp;
temp = h->next;
while (temp!=NULL&&temp->data != X)
{
temp = temp->next;
}
if (temp)
{
return temp;
}
else
return NULL;
}

Lnode *get(Lnode*h,int i) //查找第i个元素
{
int j;
Lnode *p;
p = h->next;
j = 1;
while (p&&j<i)
{
p = p->next;
j++;
}
if (i==j)
{
return p;
}
else
return NULL;
}

怎么调用你灵活使用吧!本回答被网友采纳
相似回答
大家正在搜