回 帖 发 新 帖 刷新版面

主题:数据结构--顺序表(望大家来评论看看怎么改进更好! 谢谢!)

[b][size=4][color=FF00FF]我的blog,[url=http://www.9ite.cn]http://www.9ite.cn[/url]欢迎大家来踩[/color][/size][/b]


/*线性表子程序*/
#include "stdio.h"
#include "malloc.h"
#include "conio.h"
#include "stdlib.h"
#define MAX 80
typedef struct
{
    int data[MAX];
    int last;
}Seqlist;

Seqlist *Init_Seqlist()
{
    Seqlist *L;
    L=new Seqlist;
    L->last=-1;
    return L;
}

int Insert_Seqlist(Seqlist *L,int i,int x)
{
    int j;
    if(L->last==MAX-1)
    {printf("表满,不能插入!");
    return -1;}
    if(i<1||i>L->last+2)
    {printf("插入位置错!");
    return 0;}
    for(j=L->last;j>=i-1;j--)
        L->data[j+1]=L->data[j];
    L->data[i-1]=x;
    L->last++;
    return 1;
}

int Del_Seqlist(Seqlist *L,int i)
{
    int j;
    if(i<1||i>L->last+1)
    {printf("位置错!");
        return 0;}
    for(j=i;j<=L->last;j++)
      L->data[j-1]=L->data[j];
    L->last--;
    return 1;
}
int Location_Seqlist(Seqlist *L,int x)
{
    int i=0;
    while(i<=L->last&&L->data[i]!=x)
        i++;
    if(i<=L->last)
        return i;
    else
        return -1;
}
void Print_Seqlist(Seqlist *L)
{
    int i;
    for(i=0;i<=L->last;i++)
        printf("%d ",L->data[i]);
}
void main()
{
    Seqlist *L;
    int i,x,flag,k;
    do{
        printf("\n\n\n");
        printf("\t\t\t      顺序表子系统\n");
        printf("\t\t\t************************\n");
        printf("\t\t\t******1--初始化表*******\n");
        printf("\t\t\t******2--插    入*******\n");
        printf("\t\t\t******3--删    除*******\n");
        printf("\t\t\t******4--查    找*******\n");
        printf("\t\t\t******5--显    示*******\n");
        printf("\t\t\t******0--返    回*******\n");
        printf("\t\t\t************************\n");
        printf("\t\t\t  请选择菜单(0-5):");
        scanf("%d",&k);
        switch(k)
        {
        case 1:
            L=Init_Seqlist();
            printf("顺序表已初始化!按任意键返回...");
            getch();
            system("cls");
            break;
        case 2:
            printf("\n请输入插入的位置i和元素x(i,x):");
            scanf("%d,%d",&i,&x);
            flag=Insert_Seqlist(L,i,x);
            if(flag==1)
            printf("\n插入成功!按任意键返回...");
            else
                printf("\n按任意键返回...");
            getch();
            system("cls");
                                break;
        case 3:
            printf("\n请输入删除位置i:");
            scanf("%d",&i);
            flag=Del_Seqlist(L,i);
            if(flag==1)
            printf("\n删除成功!按任意键返回...");
                                getch();
            system("cls");
            break;
        case 4:
            printf("\n请输入要查找的值:");
            scanf("%d",&x);
            flag=Location_Seqlist(L,x);
            if(flag!=-1)
    printf("\n值为%d在顺序表中的位置为%d!按任意键返回...",x,flag);
            else
            printf("\n顺序表中无此元素!按任意键返回...");
            getch();
            system("cls");
            break;
        case 5:
            printf("\n顺序表的元素如下:\n");
            Print_Seqlist(L);
            printf("\n按任意键返回...");
            getch();
            system("cls");
            break;
        }
    }while(k!=0);
}




回复列表 (共12个回复)

沙发

为什么不把seqlist定义为一个类呢?
还有请采用标准的int main来代替非标准的void main

板凳

[quote]    L=new Seqlist; [/quote]

没看到你有释放内存~~

3 楼


为什么要用int main()呢,如果这样用有什么好处?
让它返回一个整型值这样有什么好处呢....

4 楼

不是好处
int main()是标准

Seqlist *Init_Seqlist()
{
    Seqlist *L;
    L=new Seqlist;//缺少delete做对应
    L->last=-1;
    return L;
}

5 楼

请问楼上的,L=new Seqlist;
是因为有#include "malloc.h"
new 是里面的一函数,具有释放内存的功能啊
怎么说我的有泄漏呢,不得其解....

6 楼

是说运行的过程中没有及时释放

7 楼


麻烦楼主说详细一点,小弟不懂,呵呵..谢谢

8 楼

- -楼主是你自己

9 楼


那你说用delete对应,是怎么用法,举
个例子来看看好吗,谢谢

10 楼

楼主是从哪儿听说new是一个函数,竟然还有释放内存的功能?

楼主应该没学示C++,new 是一个操作符,不是函数,用来分配内存的,
delete是与之对应用来释放内存的操作符

你分配内存就用malloc吧,释放内存就用free,
具体用法自己查资料吧~
呵呵~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册