C语言 数据结构 实验一 【自用】

本文是C语言数据结构实验一的内容,涵盖了顺序线性表和链式线性表的基本操作,包括顺序表的合并、逆置,以及链表的合并和逆置等实践练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言 数据结构 实验一


8576 - 顺序线性表的基本操作

#include <stdio.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int

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

int InitList_Sq(SqList &L)
{
   
//算法2.3 构造一个空的线性表L 该线性表预定义大小为LIST_INIT_SIZE
//请补全代码
    L.elem = (ElemType *)malloc(sizeof(ElemType) * LIST_INIT_SIZE);
    if(!L.elem)
    {
   
        return ERROR;
    }
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return OK;
}

int Load_Sq(SqList &L)
{
   
//输出顺序表中的所有元素
	int i;
	if(!L.length) printf("The List is empty!"); //请填空
	else
	{
   
		printf("The List is: ");
		for(i = 0; i < L.length; i++) printf("%d ", L.elem[i]); //请填空
	}
	printf("\n");
	return OK;
}

int ListInsert_Sq(SqList &L, int i, int e)
{
   
//算法2.4 在顺序线性表L中第i个位置之前插入新的元素e
//i的合法值为1≤i≤L.length+1
//请补全代码
    if(i < 1 || i > L.length+1)
    {
   
        return ERROR;
    }
    if(L.length >= L.listsize)
    {
   
        L.elem = (ElemType *)realloc(L.elem, sizeof(ElemType) * (LIST_INIT_SIZE+LISTINCREMENT));
    }
    ElemType *p = &L.elem[i-1];
    ElemType *q = &L.elem[L.length];
    for( ;p != q; q--)
    {
   
        *q = *(q-1);
    }
    L.length++;
    *p = e;
    return OK;
}

int ListDelete_Sq(SqList &L, int i, int &e)
{
   
//算法2.5 在顺序线性表L中删除第i个位置的元素 并用e返回其值
//i的合法值为1≤i≤L.length
//请补全代码
    if(i < 1 || i > L.length)
    {
   
        return ERROR;
    }
    ElemType *p = &L.elem[i-1];
    ElemType *q = &L.elem[L.length-1];
    e = *p;
    for(; p != q; p++)
    {
   
        *p = *(p+1);
    }
    L.length--;
    return OK;
}

int main()
{
   
	SqList T;
	int a, i;
	ElemType e, x;
	if(InitList_Sq(T)) //判断顺序表是否创建成功
	{
   
		printf("A Sequence List Has Created.\n");
	}
	while(1)
	{
   
		printf("1:Insert element\n2:Delete element\n3:Load all elements\n0:Exit\nPlease choose:\n");
		scanf("%d", &a);
		switch(a)
		{
   
			case 1: scanf("%d%d", &i, &x);
					if(!ListInsert_Sq(T, i, x)) printf("Insert Error!\n"); //判断i值是否合法 请填空
					else printf("The Element %d is Successfully Inserted!\n", x);
					break;
			case 2: scanf("%d", &i);
					if(!ListDelete_Sq(T, i, e)) printf("Delete Error!\n"); //判断i值是否合法 请填空
					else printf("The Element %d is Successfully Deleted!\n", e);
					break;
			case 3: Load_Sq(T);
					break;
			case 0: return 1;
		}
	}
}


8577 - 合并顺序表

#include<stdio.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int

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

Status InitList_Sq(SqList &L)
{
     // 算法2.3
  // 构造一个空的线性表L。
  L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
  if (!L.elem) return OK;        // 存储分配失败
  L.length = 0;                  // 空表长度为0
  L.listsize = LIST_INIT_SIZE;   // 初始存储容量
  return OK;
} // InitList_Sq

Status ListInsert_Sq(SqList &L, int i, ElemType e)
{
     // 算法2.4
  // 在顺序线性表L的第i个元素之前插入新的元素e,
  // i的合法值为1≤i≤ListLength_Sq(L)+1
  ElemType *p;
  if (i < 1 || i > L.length+1) return ERROR;  // i值不合法
  if (L.length >= L.listsize) {
      // 当前存储空间已满,增加容量
    ElemType *newbase = (ElemType *)realloc(L.elem,
                  (L.listsize+LISTINCREMENT)*sizeof (ElemType));
    if (!newbase) return ERROR;   // 存储分配失败
    L.elem = newbase;             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值