数据结构题集(c语言版)第2章:线性表-创新互联

2.10 从顺序表中a中删除第i个元素起的k个元素
#include#include#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 int Status;

typedef struct {
    int integer;
}ElemType;

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

Status DeletK(SqList* a, int i, int k)
{
    //本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素
    if (i< 1 || k<0 || i + k>a->length) {
        printf("parameters infeasible\n");
        return INFEASIBLE;
    }
    else {
        for (int j = i + k; j<= a->length; j++, i++)
        {
            a->elem[i - 1] = a->elem[i + k - 1];
        }
        a->length -= k;
    }
    return OK;
}

int main()
{
    SqList a = {
        (ElemType*)malloc(LIST_INIT_SIZE * sizeof(SqList)),
        LIST_INIT_SIZE,
        LIST_INIT_SIZE
    };
    for (int i = 0; i< a.length; i++)
    {
        a.elem[i].integer = i + 1;
        printf("a.elem[%d]=%d ", i, a.elem[i].integer);
        if ((i + 1) % 10 == 0)putchar('\n');
    };
    putchar('\n');
    DeletK(&a, 22, 79);
    for (int i = 0; i< a.length; i++)
    {
        printf("a.elem[%d]=%d ", i, a.elem[i].integer);
        if ((i + 1) % 10 == 0)putchar('\n');
    }
    return 0;
}
2.12 比较顺序表A,B大小(不破坏原表,不一定先求得A撇B撇)
typedef struct {
    char integer;
}ElemType;

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

typedef enum{bigger=1,equal,smaller}comp_result;

comp_result SqListComp(SqList a, SqList b)
{
    //返回表a与表b的大小关系,a在前
    ElemType* pSqListA, * pSqListB;
    pSqListA = a.elem; pSqListB = b.elem;
    int count_common_elem=0;
    for (; pSqListA->integer != pSqListB->integer; pSqListA++, pSqListB++)count_common_elem++;
    if (a.length - count_common_elem == 0 && b.length - count_common_elem == 0)return equal;
    else if (a.length - count_common_elem == 0 && b.length - count_common_elem != 0)return smaller;
    else if (a.length - count_common_elem != 0 && b.length - count_common_elem != 0)
    {
        if (a.elem[count_common_elem].integer< b.elem[count_common_elem].integer)
            return smaller;
    }
    else return bigger;
    return 0;
}
2.13 试写一算法在带头节点的带链表结构上实现线性表操作LOCATE(L,X)。
typedef struct {
    int integer;
}ElementType;

typedef struct LNode{
    ElementType elem;
    struct LNode* next;
}LNode,*LinkList;

Status compare(ElementType List_elem, ElementType x);//比较两元素,相同返回OK,不同返回ERROR

int LOCATE(LinkList L, ElementType x, Status (* compare)(ElementType ,ElementType ))
{
    //在带头结点的链表L中查找数据元素x,如有,返回结点位序,如无,返回0

    if (!L)return INFEASIBLE;
    LinkList pLNode = L; pLNode++;
    for (int i = 1; pLNode != NULL; pLNode++)
    {
        if (compare(pLNode->elem, x) == OK)return i;
    }
    return 0;
}
2.14 试写一算法在带头节点的单链表结构上实现线性表操作LENGTH(L)。
typedef struct {
    int integer;
}ElementType;

typedef struct LNode{
    ElementType data;
    struct LNode* next;
}LNode,*LinkList;

int LENGTH(LinkList L)
{
    if (!L)return INFEASIBLE;

    LinkList p = L;
    int i = 0;
    while (p->next)
    {
        p = p->next;
        i++;
    }
    return i;
}

int main()
{
    LinkList l = (LinkList)malloc(sizeof(LNode));
    LinkList l1 = (LinkList)malloc(sizeof(LNode));
    l1->next = NULL;
    LinkList p = l;
    int i = 0;
    for (i = 0; i< 10; i ++ )
    {
        p->next = (LinkList)malloc(sizeof(LNode));
        
        p = p->next;
        if (!p)exit(0);
        p->data.integer = i+1;
        printf("node%d=%d\n", i+1, p->data.integer);
        
    }
    p->next = NULL;
    printf("length of l built is %d\n", i);
    int len_l, len_l1;
    printf("length of l is %d, length of l1 is %d", len_l=LENGTH(l), len_l1=LENGTH(l1));
}

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

目前创新互联已为上千多家的企业提供了网站建设、域名、网站空间、网站托管、服务器托管、企业网站设计、扎赉特网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
文章标题:数据结构题集(c语言版)第2章:线性表-创新互联
URL分享:http://myzitong.com/article/cscjjp.html