线性表——链式存储结构的实现

    严版数据结构第28页定义的单链表存储结构:

typedef struct LNode {
	ElemType data;
	struct LNode *next;
}LNode,*LinkedList;

     实现书中算法2.8——2.11:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
#define Status int

#define ERROR 0
#define OK 1

using namespace std;

typedef struct LNode {
	ElemType data;
	struct LNode *next;
}LNode,*LinkedList;
//算法2.8 查找结点
Status GetElem_L(LinkedList L, int i, ElemType &e)
{
	LNode *p = L->next;
	int j = 1;
	while (p&&j < i)
	{
		p = p->next;
		++j;
	}
	if (!p || j > i)
		return ERROR;
	e = p->data;
	return OK;
}
//算法2.9 添加结点
Status ListInsert_L(LinkedList &L, int i, ElemType e)
{
	LNode *p = L;
	int j = 0;
	while (p&&j < i - 1)
	{
		p = p->next;
		++j;
	}
	if (!p || j > i - 1)
		return ERROR;
	LNode *s = (LinkedList)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}
//算法2.10 删除结点
Status ListDelete_L(LinkedList &L, int i, ElemType &e)
{
	LNode *p=L;

	int j = 0;
	do
	{
		p = p->next;
		++j;
	} while (j<i-1||!p);
	if (!(p->next) || j > i - 1)
		return ERROR;
	LNode *q = p->next;
	p->next = q->next;
	e = q->data;
	free(q);
	return OK;
}
//逆位序创建线性表,算法2.11
void CreateList_L(LinkedList &L, int n)
{
	L= (LinkedList)malloc(sizeof(LNode));
	L->next = NULL;
	for (int i = n; i > 0; --i)
	{
		LNode *q = (LinkedList)malloc(sizeof(LNode));
		cin >> q->data;
	    q->next = L->next;
		L->next = q;
	}
}

void PrintList_L(LinkedList &L)
{
	LNode *p = L->next;
	while (p)
	{
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;

}
void main()
{
	LinkedList L;
	int number;
	cout << "输入线性表元素个数:";
	cin >> number;
	CreateList_L(L, number);
	cout << "线性表:" << endl;
	PrintList_L(L);

	int Get_Number,Elem=0;
	cout << "输入查询第几个元素:";
	cin >> Get_Number;
	int Get_Elem = GetElem_L(L, Get_Number, Elem);
	if (Get_Elem)
	{
		cout << "所查询的元素:" <<Elem<<endl;
	}
	else
	{
		cout << "第" << Get_Number << "个元素不存在" << endl;
	}

	int InsertNumber;
	cout << "插入的元素值:";
	cin >> InsertNumber;
	cout << "插入第几个位置:" << endl;
	int InNum;
	cin >> InNum;
	Status Insert = ListInsert_L(L,InNum, InsertNumber);
	if (Insert)
	{
		cout << "插入成功" << endl;
		cout << "线性表如下:" << endl;
		PrintList_L(L);
		cout << endl;
	}
	else
	{
		cout << endl;
		cout << "未插入成功" << endl;
	}

	int DeleteNumber,Delete_Elem=0;
	cout << "删除的元素位置:";
	cin >> DeleteNumber;
	Status Delete = ListDelete_L(L, DeleteNumber, Delete_Elem);

	if (Delete)
	{
		cout << endl;
		cout << "删除的值:" << Delete_Elem << endl;
		cout << "新的线性表:" << endl;
		PrintList_L(L);
	}
	else
	{
		cout << "删除失败" << endl;
	}

	system("pause");
}

猜你喜欢

转载自blog.csdn.net/x_blackbutterfly/article/details/80527107