数据结构-表

顺序表

#ifndef SEQLIST_H
#define SEQLIST_H

//顺序存储
typedef  int DataType;
struct Node {
	int MaxNum; //顺序表表中最大存储元素个数
	int num;
	DataType *element;
};
typedef struct Node SeqList;
typedef struct Node *PSeqList;

//创建一个空链表
PSeqList createNullList_Seq(int m);

//判断链表是否为空
int isNullList_Seq(PSeqList p);

//顺序表的插入
int insertPre_Seq(PSeqList p, int d, DataType x);
//删除下标为d的元素
int deleteSeq(PSeqList p, int d);

//删除值为x的元素
int delateValue(PSeqList plist, DataType x);

//输出元素
void print(PSeqList p);

#endif // !SEQ_H

#include"pch.h"
#include"SeqList.h"
#include<iostream>
using namespace std;

//创建一个空链表
PSeqList createNullList_Seq(int m) {
	PSeqList p = new SeqList;
	if (p != NULL) {
		p->element = new DataType[m];
		if (p->element != NULL) {
			p->MaxNum = m;
			p->num = 0; /*空表长度为0*/
			return p;
		}
		else free(p);
	}
	cout << "Out of space!!" << endl;
	return NULL;
}

//判断链表是否为空
int isNullList_Seq(PSeqList p) {
	return(p->num == 0);
}

//顺序表的插入
int insertPre_Seq(PSeqList p, int d, DataType x) {

	//表满
	if (p->num >= p->MaxNum) {
		cout << "OverFlow!" << endl;
		return 0;
	}
	//不存在下标为d的元素
	if (d<0 || d>p->num) {
		cout << "No exit!" << endl;
		return 0;
	}
	int i;
	for (i = p->num - 1; i >= d; i--) {
		p->element[i + 1] = p->element[i];//[d,num-1]的元素后移
	}
	p->element[d] = x; //在位置为d出插入元素x
	p->num += 1;
	return 1;
}
//删除下标为d的元素
int deleteSeq(PSeqList p, int d) {
	if (d<0 || d>p->num - 1) {
		cout << "NO exit!" << endl;
		return 0;
	}
	for (int i = d; i < p->num; i++) {
		p->element[i] = p->element[i + 1];
	}
	p->num -= 1;
	return 1;
}
//删除值为x的元素
int delateValue(PSeqList plist, DataType x) {
	PSeqList p = plist;

	if (p->num == 0) {
		cout << "Empty List!" << endl;
		return 0;
	}
	for (int i = 0; i < p->num; i++)
	{
		if (p->element[i] == x) {
			deleteSeq(p, i);
		}
	}
	return 1;
}

//输出元素
void print(PSeqList p) {
	int m = p->num;
	for (int i = 0; i < m; i++) {
		cout << p->element[i] << " ";
	}
	cout << endl;
}

链表

#pragma once
#ifndef LIST_H
#define LIST_H
#include<iostream>
using namespace std;

typedef int DataType;
typedef struct  node {
	DataType info; //数据域
	struct node *next;//指针域
}Node, *PLinkList;

//创建一个空链表
PLinkList createNullList();

//判断链表是否为空
int isNullList(PLinkList p);

//在单链表中找到某元素的存储位置
PLinkList locate_link(PLinkList p, DataType x);
//打印链表信息
int print(PLinkList plist);

#endif // !LIST_H


#include"pch.h"
#include"List.h"
#include<iostream>
using namespace std;

//创建一个空链表
PLinkList createNullList() {
	PLinkList head, tail, temp;
	DataType elem = -1;
	head = new Node;

	if (head == NULL)
		cout << "Out of space!" << endl;

	head->next = NULL;
	tail = head;

	while (true) {
		cin >> elem;
		if (elem == 0)break;
		temp = new Node;
		if (temp == NULL) {
			cout << "申请空间失败!" << endl;
			break;
		}
		temp->info = elem;
		temp->next = NULL;
		tail->next = temp;
		tail = temp;
	}


	return head;
}

//判断链表是否为空
int isNullList(PLinkList p) {
	return (p->next == NULL);
}

//在单链表中找到某元素的存储位置
PLinkList locate_link(PLinkList p, DataType x) {
	PLinkList q;
	if (p == NULL)return NULL;
	q = p->next;
	while (q->next != NULL && q->info != x)
		q = q->next;
	return q;
}

int print(PLinkList plist) {
	PLinkList p = plist->next;
	if (p == NULL)return 0;
	while (p != NULL) {
		cout << p->info << " ";
		p = p->next;
	}
	return 0;
}
posted @ 2022-05-10 23:18  iforeverhz  阅读(45)  评论(0)    收藏  举报