注册 登录
编程论坛 数据结构与算法

顺序表编程题

朴痞子 发布于 2010-05-17 20:57, 977 次点击
编写程序,将若干整数从键盘输入,以顺序表的形式存储起来。
(1)计算顺序表中元素的个数。
(2)在表中查找某个元素,如果存在就输出该元素位置,然后删除它
 (3)在某个位置插入一个新的元素
 (4)从小到大排序
8 回复
#2
朴痞子2010-05-17 20:58
在线等....
#3
2010-05-18 18:15
下面的希望给你一些启示,每种操作都以先排好序为前提.
#include <stdio.h>
#define maxsize 100

typedef struct List
{
    int data[maxsize];
    int length;
}SqList;

SqList Initlist()
{
    SqList L;
    L.length=0;
    return L;
}

SqList Invert(SqList L,int i,int x)
{
    int j;
    if(i<1||i>L.length+1)
    {
        printf("Error");return;
    }
    else if(i==L.length+1)
    {
        L.data[L.length]=x;
        L.length++;
    }
    else
    {
        for(j=L.length;j>i-1;j--)
        L.data[j]=L.data[j-1];
        L.data[i-1]=x;
        L.length++;
    }
    return L;
}

SqList Order(SqList L)
{
    int i,j,k,x;
    for(i=1;i<L.length;i++)
    {
        if(L.data[i]<L.data[i-1])
        {
            j=0;
            while(L.data[j]<L.data[i]) j++;
            x=L.data[i];
            for(k=i-1;k>=j;k--) L.data[k+1]=L.data[k];
            L.data[j]=x;
        }
    }
    return L;
}

SqList Delete(SqList L,int i)
{
    int k;
    for(k=i;k<L.length;k++)
    {
        L.data[k]=L.data[k+1];
    }
    L.length--;
    return L;
}

SqList Search(SqList L,int x)
{
    int i;
    i=0;
    if(x>L.data[L.length-1])
    printf("False!");
    else
    {
        while(L.data[i]<x) i++;
        if(L.data[i]==x)
        {
            printf("True!Place: %d ",i+1);
            L=Delete(L,i);
        }
        else  printf("False");
    }
    return L;
}

void printlist(SqList L)
{
    int i;
    for(i=0;i<L.length;i++)
    printf("%d ",L.data[i]);
    printf("\n");
}

int main()
{
    SqList L;int x;
    int i=1;
    L=Initlist();
    scanf("%d",&x);
    while(x!=2012)
    {
        L=Invert(L,i,x);
        i++;
        scanf("%d",&x);
    }
    printlist(L);
    L=Order(L);
    printlist(L);
    scanf("%d",&x);
    scanf("%d",&i);
    L=Invert(L,i,x);
    printlist(L);
    L=Order(L);
    printlist(L);
    scanf("%d",&x);
    L=Search(L,x);
    printf("\n");
    printlist(L);
    return 0;
}
#4
tance1232010-05-18 20:44
那么复杂?
#5
2010-05-18 20:50
以下是引用tance123在2010-5-18 20:44:28的发言:

那么复杂?

你有更好的算法?求教了...
#6
2010-05-19 00:12
还好吧,没个函数的代码不是很长的,而且很多是因为考虑到程序的健壮性书写的一些判断条件。
#7
新绿2010-05-19 16:37
SqList Invert(SqList L,int i,int x)
{
    int j;
    if(i<1||i>L.length+1)
    {
        printf("Error");return;
    }
==>
#include "stdlib.h"
SqList Invert(SqList L,int i,int x)
{
    int j;
    if(i<1||i>L.length+1)
    {
        printf("Error");
        exit;
    }
#8
2010-05-19 16:41
以下是引用新绿在2010-5-19 16:37:06的发言:

SqList Invert(SqList L,int i,int x)
{
    int j;
    if(i<1||i>L.length+1)
    {
        printf("Error");return;
    }
==>
#include "stdlib.h"
SqList Invert(SqList L,int i,int x)
{
    int j;
    if(i<1||i>L.length+1)
    {
        printf("Error");
        exit;
    }

stdlib.h好像许多时候都并不需要,里面的函数能直接用.
#9
Alen01282010-05-23 09:53
stdlib.h下,有对链表进行排序的函数吗?
1