estruturas de dados da tabela lineares - (, uma estrutura de armazenamento sequencial) [linguagem C]

estruturas de dados da tabela lineares - (, uma estrutura de armazenamento sequencial)

A estrutura lógica da forma linear

Estrutura de dados

definição da tabela Linear:

  1. Uma estrutura linear é armazenada, os elementos de dados "são dispostos um após o outro," e um número limitado de elementos.
  2. Em um dado elemento do tipo linear na tabela é o mesmo - identidade.
  3. Mesa linear tendo o mesmo tipo de dados n (n> = 0) sequência de elementos finitos, geralmente referidas como: (A 2 , A 2 , ······, A I-1. , Um eu , A I + 1 , ······, um a N- ), desta vez, pesar um i-1 é uma i elementos precursores directos, um i + 1 é uma i elementos sucessor directo. NOTA: em que n é o comprimento da mesa, a = 0 é vazio.
  4. Dizemos "linear" e "não-linear", discutido somente no nível lógico, independentemente da hierarquia de armazenamento, de modo lista duplamente ligada ainda é linear e circular lista tabela vinculada.

O funcionamento básico da mesa linear:

Para diferentes aplicações, a operação básica é diferente da forma linear, a operação básica é a seguinte.

  1. Tabela linear Inicialização: Init_List (L)
  2. Tabela para o comprimento linear: Length_List (L)
  3. Toma os elementos da tabela: get_list (G, I, X)
  4. De acordo com o valor de encontrar: Locate_List (L, x)
  5. inserção numérica: Insert_List (G, I, X)
  6. supressão numérica: Delete_List (G, I, X)
condições de operação de inserção iniciais:

- a presença de L linear tabela
- na posição correcta (1 <= i <= n , n é o comprimento da tabela antes da inserção)

Após os resultados da operação inserindo:

Inserção de um novo elemento de um valor x, o que fará com que a linha original tabela número L de o i-ésimo posição é: i, i + 1, ···, n número de elementos de dados torna-se: i + 1, i 2, ···, n + 1, a tabela original para o comprimento da tabela comprimento = + 1

Excluir as condições iniciais:

- a presença de uma lista linear L, 1 <= i <= n.

resultado de exclusão da operação:

Remover a lista L número i linear de elementos de dados, eliminar esse número é: i + 1, o número de i + 2, ···, n, torna-se elementos de dados: i, i + 1, ··· , n - 1, a tabela original nova tabela comprimento = comprimento - 1

A estrutura física da forma linear

(A) a estrutura de armazenamento sequencial e o funcionamento básico dos mesmos

Características: em memória, com uma sequência de espaço de armazenamento contíguo para armazenar os vários elementos da forma linear, também conhecida como mesa de sequência. Uma vez que o espaço de endereço de memória é contínua, é conseguido entre os elementos de dados lógicos com relacionamento físico adjacente é simples, tabela sequência longa conhecido endereço de início e o endereço extremidade de cada elemento de dados é ocupada pelo número de células adjacentes, isto pode ser obtida de ordem i endereço de elemento de dados, que é a ordem do elemento de mesa que tem as características de dados em série pelo acesso aleatório.
No geral: estrutura de armazenamento sequencial de forma linear, refere-se à utilização de endereços de memória são locais sequencialmente contíguos que armazenam os elementos de dados na forma linear.
Aqui Insert Picture Descrição
Quando atingir os tabelas básicas sequência de operação pode ser dominado por completar algumas funções básicas do algoritmo mesa de operação e ordem, onde fazemos através de um simples "sistema de gestão de informações de funcionários" para alcançar algoritmo de correlação.

Requisitos do projeto:
  1. "Sistema de Gestão de Informação Pessoal" no número de trabalhadores para cada registro de empregado não contém, o nome do nome, número do departamento depno, o número de salário e informação do salário;
  2. Os trabalhadores podem inserir um registro.
  3. Todos os funcionários podem exibir registros.
  4. Classificadas por número há incrementos para todos os registros de funcionários.
  5. Depno por incrementos número do setor para todos os funcionários para registros de classificação.
  6. De acordo com o número de aumento salarial salário para todos os trabalhadores para os registros de classificação.
  7. Você pode excluir para excluir registros de funcionários.

Tabela linear de inserção, deleção, e outras operações, isto é, o comprimento variável da mesa, de modo que a capacidade da matriz precisa de ser concebido suficientemente grande.
Suponha-se que de Dados [MaxSize] está representado, ele será ajustado dependendo da sua MaxSize a situação real, tal como definido MaxSize 50, isto é, uma tabela linear 50 capaz de armazenar os elementos de dados consecutivos no código abaixo.
O espaço de armazenamento nos dados de elementos de dados [0] a [dados MaxSize-1], mas o espaço disponível para o comprimento da mesa linear MaxSize = 50.

Código do Item:
#include "stdio.h"
#define MaxSize 50
struct Employee{        //在这里定义一个结构体Employee
	int no;
	int depno;
	char name[10];      //定义char类型数组长度为10来存储员工姓名
	float salary;
};
typedef Employee DataType;  //将结构体Employee定义为别名DataType,实质上是相等的
typedef struct Seq {        //在定义顺序表的同时将顺序表设置为别名LNode。
	DataType data[MaxSize]; //即Employee data[MaxSize];
	int length;
}LNode;
//线性表的初始化
void Init_List(LNode *L) {  //LNode *L 为形参
	L->length = 0;          //将表中length指针设置为0,表示表中没有元素。
}

//创建线性表来存储员工信息
void Create_List(LNode* L) { 
	int i = 0, no; //员工编号
	Init_List(L);  //先初始化表
	while (printf("请输入员工编号,以负数结尾\n"), scanf("%d", &no), no > 0)
	{                                   //用户输入的编号小于0停止
		L->data[i].no = no;             //将用户输入的编号no放到表中的data[i]中,第一个元素i=0
		printf("请输入员工姓名、部门编号、员工薪水,用空格隔开。\n");
		scanf("%s%d%f", L->data[i].name, &L->data[i].depno, &L->data[i].salary);
		i++;                            //当用户输入第一个元素后i++表示接着存入第二个元素
	}
	L->length = i;  //长度赋值          //停止输入后i即为表长,赋值给表中的length
}

//输出员工相关信息
void display(LNode* L) {
	int i;
	for (i = 0; i < L->length; i++){
		printf("%d  %s  %d  %.2f\n", L->data[i].no, L->data[i].name, L->data[i].depno, L->data[i].salary);}
	printf(" \n");
}

//按照员工薪水对员工信息进行排序(升序)
void sort_salary(LNode *L){
int i,k,n;Employee t;           //定义一个中间值t来进行交换
n=L->length;                    //表长赋值为 n
	for (i = 1; i < n; i++){    //外循环的次数小于表长 n

		for ( k = 0; k < n - i; k++) {
			if (L->data[k].salary > L->data[k+1].salary){ //当表中前面一个薪水大于后面一个时交换
			t = L->data[k];
			L->data[k]= L->data[k+1];
			L->data[k+1]=t;
			}
		}
	}
	printf("按照薪水的排序如下:\n");
}

//按照员工的部门编号排序(升序)
void sort_depno(LNode *L){
int i,k,n;Employee t;
n=L->length;
	for (i = 1; i < n; i++){

		for ( k = 0; k < n - i; k++) {
			if (L->data[k].depno > L->data[k+1].depno){
			t = L->data[k];
			L->data[k]= L->data[k+1];
			L->data[k+1]=t;
			}
		}
	}	printf("按照部门编号的排序如下:\n");
	
}

//按员工编号排序(升序)
void sort_no(LNode *L){
int i,k,n;Employee t;
n=L->length;
	for (i = 1; i < n; i++){

		for ( k = 0; k < n - i; k++) {
			if (L->data[k].no > L->data[k+1].no){
			t = L->data[k];
			L->data[k]= L->data[k+1];
			L->data[k+1]=t;
			}
		}
	}
	printf("按照员工编号的排序如下:\n");
	
}
//插入员工信息
void inputEmp(LNode *L,int i,Employee t){
	int k;
	if(i<1|| i>L->length+1){//插入的位置小于表长或超过表长+1(前面会有一个空值)时就不能插入
		printf("插入位置不合理\n");} 
	for(k=L->length-1; k>=i-1;k--)   //当插入的位置合理时,将该位置(i)及其后面元素后移
		L->data[k+1] = L->data[k];  //L->data[k]为最后一个元素,将其向后移L->data[k+1]
	    L->data[i-1]=t;             //全部后移后将t中的元素放入已置空的L->data[i-1]中
	    L->length++;                //插入一个元素后表长+1
}
//根据职工编号删除员工信息
void deleteEmp(LNode *L,int eno){   
	int i,k;
	for(i=0;i<L->length;i++){ 
		if(L->data[i].no==eno) break;  //循环查找表中员工编号为 eno的员工信息,
	}
	
	if(i<L->length){ 
		for(k=i;k<L->length-1;k++)
     	L->data[k]=L->data[k+1];
	}
     	L->length--;
}
 
void main(){
	LNode List;
	int i;
	Employee t;
	Create_List(&List);
	sort_salary(&List);
	display(&List);
	sort_depno(&List);
	display(&List);
	sort_no(&List);
	display(&List);
	printf("插入员工信息(编号,姓名,部门编号,薪水)\n");
	printf("请先输入要插入的位置: \n");
	scanf("%d",&i);
	printf("请再输入员工编号、姓名、部门编号、薪水\n");
	scanf("%d%s%d%f",&t.no,t.name,&t.depno,&t.salary);
	inputEmp(&List,i,t);
	display(&List);
	printf("请输入要删除的职工编号\n");
	scanf("%d",&i);
	deleteEmp(&List,i);
	printf("职工编号为%d的员工信息已被删除!\n",i);
	display(&List);
	

}

Lançado três artigos originais · ganhou elogios 0 · visualizações 103

Acho que você gosta

Origin blog.csdn.net/weixin_44924446/article/details/102889123
Recomendado
Clasificación