顺序表的习题1(c语言)

(1)产生50个1~100的随机整数,将其中偶数依次保存在顺序表中
(2)输出顺序表的所有元素,并求顺序表的长度
(3)在指定位置i处插入一个1~100随机整数
(4)删除顺序表中值为i或者指定位置I的节点

#include<stdio.h>
# define MAXSIZE 100
typedef int elemtype;
typedef struct sequlist
{
	elemtype data[MAXSIZE];
	int last;
}Sequlist;
//顺序表的初始化。 
Sequlist *Init_Sequlist(){
	Sequlist *L;//定义顺序表的指针变量。
	L=(Sequlist *)malloc(sizeof(Sequlist));//申请分配内存空间。
	if(L!=NULL){
		L->last=-1;//设置顺序表的长度为-1,表示顺序表为空。 
	} 
	int j=0;
	for(;j<=50;j++){
		elemtype d=rand()%99+1;
		L->data[++L->last]=d;
	}
	return L;
}
//求顺序表的长度。 
int Sequlist_Length(Sequlist *L){
	return (L->last+1);//返回顺序表的长度。 
}
//插入。
int Insert_Sequlist(Sequlist *L,elemtype x,int i){
	//在指定的位置i,插入值为x的结点,L是Sequlist类型的指针变量。
	int j;
	if(L->last>=MAXSIZE-1){
	
	//检查顺序表是否已满。  
	} 
		if(i<1||i>L->last+2){
			return -1;
		} 
		for(j==L->last;j>=i-1;j--)//在第i个位置插入新结点x 
			L->data[j+1]=L->data[j];//结点依次向后移动一个位置 
			L->data[i-1]=x;//插入x到第i个位置。 
			L->last=L->last+1;	//将顺序表的长度加1. 
			return 1;
		}  
//删除指定位置的元素。
int Delete_Sequlist(Sequlist *L,int i){//删除第i个位置上的结点。 
	int j;
	if(i<1||i>L->last+1){
		return 0;
	}
	else
	{
		for(j==i;j<=L->last;j++){
			L->data[j-1]=L->data[j];//结点前移。 
		L->last--;//表长减一。 
		}
		return 1;//删除成功,返回-1。 
	}
} 
//对元素的遍历。
int Print_Sequlist(Sequlist *L){
	int i=0;
	if(L->last==-1){
		return 0;
	}
	for(;i<=L->last;i++){
		printf("a[%2d]=%4d\t",i,L->data[i]);
		if((i+1)%5==0)printf("\n");
	}
	return 1;
} 

void main(){
	Sequlist *L;
	int i=3;
	elemtype j=16;
	L=Init_Sequlist();
	Insert_Sequlist(L,j,i);
	int result=Print_Sequlist(L);
	if(result==1){
		printf("插入成功!");
	}
	else printf("插入失败!");
	int y=Sequlist_Length(L);
	printf("%d",y);
	Delete_Sequlist(L, i);
} 

输出结果:

a[ 0]=  42      a[ 1]=  54      a[ 2]=  16      a[ 3]=  98      a[ 4]=  68
a[ 5]=  63      a[ 6]=  83      a[ 7]=  94      a[ 8]=  55      a[ 9]=  35
a[10]=  12      a[11]=  63      a[12]=  30      a[13]=  17      a[14]=  97
a[15]=  62      a[16]=  96      a[17]=  26      a[18]=  63      a[19]=  76
a[20]=  91      a[21]=  19      a[22]=  52      a[23]=  42      a[24]=  55
a[25]=  95      a[26]=   8      a[27]=  97      a[28]=   6      a[29]=  18
a[30]=  96      a[31]=   3      a[32]=  46      a[33]=  21      a[34]=  55
a[35]=  88      a[36]=  14      a[37]=  27      a[38]=  65      a[39]=   8
a[40]=  94      a[41]=  93      a[42]=  52      a[43]=  39      a[44]=  40
a[45]=  52      a[46]=  12      a[47]=  94      a[48]=  89      a[49]=  39
a[50]=  38      a[51]=   6      插入成功!52

在已定数组的第2位插入确定的数:16。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序表是一种线性结构,可以通过连续的内存空间来存储元素。在C语言中,可以使用数组来实现顺序表。下面是顺序表的基本操作: 1. 初始化顺序表: ```c #define MAX_SIZE 100 // 定义顺序表的最大长度 typedef struct { int data[MAX_SIZE]; // 存储数据的数组 int length; // 当前顺序表的长度 } SeqList; void InitList(SeqList *list) { list->length = 0; // 初始化顺序表的长度为0 } ``` 2. 插入元素: ```c int Insert(SeqList *list, int pos, int element) { if (pos < 1 || pos > list->length + 1) { return 0; // 插入位置非法,返回失败 } if (list->length >= MAX_SIZE) { return -1; // 顺序表已满,返回失败 } for (int i = list->length; i >= pos; i--) { list->data[i] = list->data[i - 1]; // 向后移动元素 } list->data[pos - 1] = element; // 在插入位置插入新元素 list->length++; // 长度加1 return 1; // 插入成功 } ``` 3. 删除元素: ```c int Delete(SeqList *list, int pos) { if (pos < 1 || pos > list->length) { return 0; // 删除位置非法,返回失败 } for (int i = pos; i < list->length; i++) { list->data[i - 1] = list->data[i]; // 向前移动元素 } list->length--; // 长度减1 return 1; // 删除成功 } ``` 4. 查找元素: ```c int Search(SeqList *list, int element) { for (int i = 0; i < list->length; i++) { if (list->data[i] == element) { return i + 1; // 返回元素在顺序表中的位置 } } return 0; // 没有找到元素 } ``` 5. 获取指定位置的元素: ```c int GetElement(SeqList *list, int pos) { if (pos < 1 || pos > list->length) { return -1; // 位置非法,返回错误值 } return list->data[pos - 1]; // 返回指定位置的元素 } ``` 6. 修改指定位置的元素: ```c int Modify(SeqList *list, int pos, int element) { if (pos < 1 || pos > list->length) { return 0; // 位置非法,返回失败 } list->data[pos - 1] = element; // 修改指定位置的元素 return 1; // 修改成功 } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值