| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 555 人关注过本帖
标题:求严蔚敏《数据结构》中包含初始化,插入,删除的完整调试程序?
只看楼主 加入收藏
zyfmoto
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-9-14
结帖率:100%
  已结贴   问题点数:20  回复次数:2   
求严蔚敏《数据结构》中包含初始化,插入,删除的完整调试程序?
求严蔚敏《数据结构》中包含初始化,插入,删除的完整调试程序?
2014-09-17 23:02
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
  得分:14 
她的书不知道有没有

Maybe
2014-09-19 17:21
皖西桃花人
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:44
专家分:118
注 册:2014-10-2
  得分:0 
这是一个完整的顺序表,各种功能均实现了。你参考参考吧。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

#define Status int
#define ElemType int

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100        //线性表存储空间的初始分配量
#define LISTINCREMENT 10        //线性表存储空间的分配增量

typedef struct{
    ElemType *elem;
    int length;
    int listsize;
}SqList;

Status InitList_sq(SqList &L)
{
    //初始化一个顺序表
    L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(!L.elem)                    //存储分配失败
        exit(OVERFLOW);
    L.length=0;                    //初始长度0
    L.listsize=LIST_INIT_SIZE;    //初始容量
    return OK;
}//InitList_sq

void DestroyList_sq(SqList &L)
{
    //销毁顺序表
    free(L.elem);
    L.elem=NULL;
    L.length=0;
    L.listsize=0;
}//DestroyList_sq

Status ListInsert_sq(SqList &L,int i,ElemType e)
{
    //插入记录到顺序表
    if(i<1 || i>L.length+1)
    {
        printf("输入不合法!!\n");
        return ERROR; //i的值不合法
    }
    if(L.length>=L.listsize)
    {
        ElemType *newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase)                    //分配失败
            exit(OVERFLOW);
        L.elem=newbase;                    //新基址
        L.listsize+=LISTINCREMENT;        //增加存储容量
    }
    ElemType *q = &(L.elem[i-1]);                //q为插入位置
    for(ElemType *p=&(L.elem[L.length-1]);p>=q;--p)
        *(p+1) = *p;                    //插入位置及之后的元素右移
    *q = e;                //插入e
    ++L.length;
    return OK;
}//ListInsert_sq

void Add(SqList &L)
{
    //添加到列表尾
    char c;
    ElemType e;
    do
    {    printf("\n请输入一条数据(整数):");
        scanf("%d",&e);
        ListInsert_sq(L,L.length+1,e);    //尾添加
        printf("\n是否继续输入(按y继续)?");
        c=getche();
        putchar('\n');
    }while(c=='y');
}//Add

void Insert(SqList &L)
{
    //插入到指定位置
    char c;
    ElemType e;
    int i;
    do
    {    printf("\n请输入一条数据(整数):");
        scanf("%d",&e);
        do
        {
            i=L.length;
            printf("请输入插入位置1 ~ %d:",i+1);
            scanf("%d",&i);
        }while(ListInsert_sq(L,i,e)==0);    //插入位置不正确
        printf("\n是否继续输入(按y继续)?");
        c=getche();
        putchar('\n');
    }while(c=='y');
}//Insert

void OutputList_sq(SqList &L)
{
    //输出所有记录
    int l=L.length;
    if(l!=0)
    {
        printf("所有记录如下:\n");
        for(int i=0;i<L.length;i++)
            printf("%d\n",L.elem[i]);
    }
    else
        printf("表为空!\n\n");
}//OutputList_sq

Status ListEmpty_Sq(SqList &L)
{
    //判断顺序表是否为空
    if(L.length == 0)
        return TRUE;
    else 
        return FALSE;
}//ListEmpty_Sq

int ListLength_Sq(SqList &L)
{
    //求长度
    return L.length;
}//ListLength_Sq

Status ListDelete_Sq(SqList &L,int i,ElemType &e){
    //在线性顺序表中删除第i个元素,并用e返回其值
    //i的合法值为1<=i=<ListLength_Sq(L)
    if ((i<1) || (i>L.length))
    {
        printf("输入不合法!!!");
        return ERROR;
    }
    ElemType *p = &(L.elem[i-1]);
    e = *p;
    ElemType *q = L.elem+L.length-1;
    for(++p; p<= q; ++p)
        *(p-1) = *p;
    --L.length;
    return OK;
}//ListDelete_Sq

void Delete(SqList &L)
{
    //删除指定位置
    ElemType a;
    int i;
    printf("\n请输入删除位置(非正数则退出):");
    scanf("%d",&i);
    while(i>0)
    {
        if(ListDelete_Sq(L,i,a)!=0)    //如果成功删除
            printf("您删除了第%d条记录< %d >\n",i,a);
        printf("\n请输入删除位置(非正数则退出):");
        scanf("%d",&i);
    }
}//Delete

Status GetElem(SqList &L,int i,ElemType &e)
{
    //获得指定位置记录
    if ((i<1) || (i>L.length))
    {
        printf("输入不合法!!!");
        return ERROR;
    }
    e=L.elem[i-1];
    return OK;
}//GetElem

void Get(SqList &L)
{
    //获得指定位置输入
    ElemType a;
    int i;
    printf("\n请输入查找位置(非正数则退出):");
    scanf("%d",&i);
    while(i>0)
    {
        if(GetElem(L,i,a)!=0)
            printf("第%d个元素为< %d >\n",i,a);
        printf("\n请输入查找位置(非正数则退出):");
        scanf("%d",&i);
    }
}//Get

void ClearList(SqList &L)
{
    //清空顺序表
    L.length=0;
}//ClearList

int LocateElem(SqList &L,ElemType e)
{
    //查找某记录出现的第一次位置
    for(int i=1;i<=L.length;i++)
        if(L.elem[i-1]==e)
            break;
        if(i>L.length)
            i=0;
    return i;
}//LocateElem

void Locate(SqList &L)
{
    //输入要查找的某记录
    char c;
    ElemType a;
    int i;
    do
    {    printf("\n请输入一条待查询记录(整数):");
        scanf("%d",&a);
        i=LocateElem(L,a);
        if(i==0)
            printf("不存在此记录!!\n");
        else
            printf("%d是第%d条记录!!\n",a,i);
        printf("\n是否继续查询记录(按y继续)?");
        c=getche();
        putchar('\n');
    }while(c=='y');
}//Locate

int main()
{
    SqList L;
    InitList_sq(L);        //自动初始化顺序表
    while(1)
    {
        system("cls");
        printf("\t0、输出所有记录\n");
        printf("\t1、销毁顺序表\n");    
        printf("\t2、判断表空\n");
        printf("\t3、测量表长\n");
        printf("\t4、添加记录\n");
        printf("\t5、插入记录\n");
        printf("\t6、删除记录\n");
        printf("\t7、查询记录\n");
        printf("\t8、清空顺序表\n");
        printf("\t9、取指定位置记录\n");
        char c=getch();
        while(c>'9' || c<'0')
            c=getch();
        printf("您选择了%c:\n\n",c);
        switch(c)
        {
            case '0':OutputList_sq(L);
                system("Pause");break;
            case '1':DestroyList_sq(L);
                printf("线性表已销毁!\n\n");
                InitList_sq(L);
                //销毁将重新初始化顺序表
                printf("线性表已初始化!\n\n");
                system("Pause");break;    
            case '2':
                if(ListEmpty_Sq(L)==1)
                    printf("顺序表为空!!\n\n");
                else
                    printf("顺序表不为空!!\n\n");
                system("Pause");
                break;
            case '3':
                printf("顺序表的长度为: %d\n\n",ListLength_Sq(L));
                system("Pause");break;
            case '4':Add(L);break;
            case '5':Insert(L);break;
            case '6':Delete(L);break;
            case '7':Locate(L);break;
            case '8':ClearList(L);
                printf("线性表已清空!\n\n");
                system("Pause");break;
            case '9':Get(L);break;
            default:break;
        }
    }
    return 0;
}
2014-10-02 23:46







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033922 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved