首页 > 其他分享 >C语言-数据结构之顺序表

C语言-数据结构之顺序表

时间:2023-09-21 20:44:17浏览次数:37  
标签:顺序 return int list C语言 sqlist last 数据结构 data

#include <stdio.h>
#define N 128
typedef int data_type;

typedef struct {
	data_type data[N];
	int last;
}sqlist;

sqlist * list_create();
int list_show(sqlist * L);
int list_clear(sqlist * L);
int list_destory(sqlist * L);
int list_empty(sqlist * L);
int list_length(sqlist * L);
int list_local(sqlist * L, data_type value);
int list_insert(sqlist * L, data_type value, int pos);
int list_head_insert(sqlist * L, data_type value);
int list_append(sqlist * L, data_type value);
int list_modify(sqlist * L, data_type value, int pos);
int list_find_index(sqlist * L, data_type value);
int list_delete(sqlist * L, int pos);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlist.h"

sqlist * list_create(){
	sqlist * L; // 指向随机的一个地址,需要申请一块内存
	L = (sqlist *)malloc(sizeof(sqlist));
	if(L == NULL){
		printf("%s\n", "malloc failed");
		return L;
	}
	// 该内存空间需要初始化下
	memset(L, 0, sizeof(sqlist));
	L->last = -1;

	return L;
}
int list_show(sqlist * L){
	int i;
	if (L==NULL){
		return -1;
	}
	for (i = 0; i <= L->last; ++i){
		printf("%d ", L->data[i]);
	}
	puts("");
	return 0;
}
// 清空表
int list_clear(sqlist * L){
	if(L==NULL){
		return -1;
	}
	if(L->last == -1){
		return 0;
	}
	memset(L, 0, sizeof(sqlist));
	L->last = -1;
	return 0;
}
// 有问题❎
int list_destory(sqlist * L){
	if(L==NULL){
		return -1;
	}
	free(L);
	L = NULL;
	return 0;
}
int list_empty(sqlist * L){
	if(L==NULL){
		return -1;
	}
	if(L->last == -1){
		printf("%s\n", "list is empty");
		return 1;
	}
	return 0;
}

int list_length(sqlist * L){
	if(L==NULL){
		return -1;
	}
	return L->last+1;
}

int list_local(sqlist * L, data_type value){
	return 0;
}

// 指定索引插入
int list_insert(sqlist * L, data_type value, int pos){
	int i;
	
	if (L==NULL){
		return -1;
	}
	// list is full
	if (L->last == N - 1){
		printf("%s\n","list_insert failed, list is full");
		return -1;
	}
	// pos范围应该是[0, last+1],其中注意last=-1的极限值
	if (pos<0 || pos > L->last+1){
		printf("%s\n","pos is invalid");
		return -1;
	}
	// 元素移动,先将下标最大的移动到后边
	for (i = L->last; i>= pos; i--){
		L->data[i+1] = L->data[i];
	}
	L->data[pos] = value;
	L->last++;
	return 0;
}

// 头插
int list_head_insert(sqlist * L, data_type value){
	int i;
	if (L==NULL){
		return -1;
	}
	// list is full
	if (L->last == N - 1){
		printf("%s\n","list_head_insert failed, list is full");
		return -1;
	}
	for (i = L->last; i >=0; i--){
		L->data[i+1] = L->data[i];
	}
	L->data[0] = value;
	L->last++;
	return 0;
}
// 尾部追加
int list_append(sqlist * L, data_type value){
	if (L==NULL){
		return -1;
	}
	// list is full
	if (L->last == N - 1){
		printf("%s\n","list_append failed, list is full");
		return -1;
	}
	L->last++;
	L->data[L->last] = value;
	return 0;
}
// 修改指定索引的值
int list_modify(sqlist * L, data_type value, int pos){
	// empty
	if(list_empty(L) == 1){
		return 0;
	}
	// pos范围应该是[0, last+1]
	if (pos<0 || pos > L->last){
		printf("%s\n","pos is invalid");
		return -1;
	}
	L->data[pos] = value;
	return 0;
}

int list_find_index(sqlist * L, data_type value){
	if (L==NULL){
		return -1;
	}
	int i;
	for (i = 0; i < L->last+1; i++){
		if(value == L->data[i]){
			return i;
		}
	}
	return -1;
}

// 删除指定索引的元素
int list_delete(sqlist * L, int pos){
	// empty
	if(list_empty(L) == 1){
		return 0;
	}
	// pos范围应该是[0, last]
	if (pos<0 || pos > L->last){
		printf("%s\n","pos is invalid");
		return -1;
	}
	int i;
	// 前移
	for (i = pos; i <= L->last; i++){
		L->data[i] = L->data[i+1];
	}
	L->last--;
	return 0;
}
#include <stdio.h>
#include "sqlist.h"

int main(int argc, char const *argv[])
{
	sqlist * L;
	L = list_create();
	if (L==NULL){
		return -1;
	}
	// list_append(L, 33);
	// list_insert(L, 10, 0);

	list_modify(L, 20, 0);
	// list_delete(L, 4);

	list_show(L);
	

	return 0;
}

标签:顺序,return,int,list,C语言,sqlist,last,数据结构,data
From: https://www.cnblogs.com/Wang-py/p/17720910.html

相关文章

  • 深入浅出程序设计竞赛(进阶篇)VO.7 进阶数据结构
    第五章二叉堆P2168[NOI2015]荷马史诗哈夫曼树P2827[NOIP2016提高组]蚯蚓找最长的蚯蚓只需要直到相对大小,其余蚯蚓长度\(+q\)等价于新产生的两条蚯蚓长度\(-q\)新产生的第一/二条蚯蚓长度分别单调,可以用队列代替堆时间复杂度\(O(n\logn+m)\)P1801黑匣子对顶堆......
  • 萌新学习C语言记录
    今天在牛客网上写了几道题有一个题是把几个十位数字放到一个集合中一开始用char%c发现只能输出十位数字,个位数字被吞掉了之后又用了int%d发现成功把几个十位数字放到一个集合中这可能就是新手常犯的错误了吧......
  • 数据结构
    1.数据结构——栈(子弹弹夹     2.数据结构——队列(地铁安检)  3.数组  4.链表  5.红黑树 ......
  • kafka如何保证消费的顺序性
    一个主题有多个分区,只有在一个分区内的消息才有顺序性,我们可以在发送消息时指定对应的分区号或者发送消息时按照相同的业务设置相同的key,通过对应key的hashcode值找到对应的分区,这样就能将消息放入一个分区从而保证消费的顺序性。......
  • C语言-复杂的指针关系
     非法的指针 指针表达式    函数指针函数指针-Sunsin-博客园(cnblogs.com)#include<stdio.h>intmain(){int*a;*a=12;return0;}......
  • 【C语言】指针(二)
    在上一次的博客中我了解到了指针变量、const的作用、指针之间的运算、还有野指针的介绍以及assert断言指针(一)一、数组名的理解见如下代码intarr[10]={1,2,3,4,5,6,7,8,9,10};int*p=&arr[0];这里我们使用&arr[0]的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,......
  • C语言之函数篇
    前言函数知识。一起开始学习吧!@TOC一、认识函数函数?那不是数学中的知识吗?比如:指数函数,对数函数,幂函数等等,不会有小伙伴们以为牛牛要讲这些吧,很遗憾的告诉你们,这些都不是我们今天要讲的内容。牛牛是不会跑题的,牛牛今天主要介绍的是c语言中的函数。我们知道一个大的问题往往是可以......
  • C语言 scanf gets fgets区别
    scanfscanf是一个格式化输入函数,用于从标准输入(通常是键盘)读取数据。chars[128];printf("pleaseinputstrings:\n");scanf("%s",s);printf("output:\n");printf("%s\n",s);注意scanf遇到空格、回车、Tab都会结束getsgets是一个不安全的......
  • 深信服24届秋招算法:所有可能的出栈顺序
    publicclassMain{privatestaticfinalScannerin=newScanner(System.in);publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{//echo();Strings="abcdef";char[]seq=s.toCharArray......
  • C语言基础语法学习笔记(一)
    前言C语言是大学时期入门编程的第一门编程语言,遗憾的是当时没好好学,这么多年过去了也没有真正的学习和使用过这门优秀的编程语言,现如今正好有时间就打算从头开始好好学一下。学习的参考资料主要是《C语言程序设计》这本书以及benny老师的C语言精讲视频课。快速入门快速入门部分......