欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构作业:链表的基本功能实现

程序员文章站 2024-03-22 10:24:22
...

这是自己根据书上的代码写出的程序能大致运行,应付老师没得问题;但是程序有许多缺陷不过嘛刚学数据结构的学生,有缺陷是正常的。

#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define ERROR 0;
typedef int Status;
typedef struct LNode {
	char data;
	struct LNode* next;
}LNode ,*LinkList;
LinkList p;
//初始化表
Status InitList(LinkList& L) {
	L = new LNode;
	L->next = NULL;
	return OK;
}
//在链表的i出得到他的值
Status GetElem(LinkList &L, int i) {
	
	int j;
	int e = 0;
	p = L->next;
	j = 1;
	while (p && j < i) {
		p = p->next;
		j++;
	}
	if (!p || j > 1)
		return ERROR;
	e = p->data;
	printf("%d", e);
	return OK;
}
Status LocateElem(LinkList &L, char e) {
	p = L->next;
	int j=1;
	while (p && p->data != e) {
		p = p->next;
		j++;
	}
	printf("数值对应链表中的位置%d", j);
	return OK;


}
//在链表i处插入一个值e
Status InserElem(LinkList& L, int i, char e) {
	p = L; int j = 0;
	LinkList s;
	while (p && (j < i - 1)) {
		p = p->next;
			j++;
	}
	if (!p || j > i - 1)
		return ERROR;
	s = new LNode;
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}
Status ListDelete(LinkList& L, int i) {
	p = L;
	LinkList q;
	int j = 0;
	while ((p->next)&&(j<i-1))
	{
		p = p->next;
		j++;
	}
	if ((!p->next) || (j > i - 1))
		return OK;
	q = p->next;
	p->next = q->next;//q是需要删除的那个链表的位置现在p的指针域直接指到了他的下下个;
	delete q;
	return OK;
}
void CreateList_h(LinkList& L, int n) {
	L = new LNode;
	L->next = NULL;
	printf("请输入需要创建链表的值域:\n");
	for (int i = 0; i < n; i++) {
		p = new LNode;
		scanf_s("%c", &p->data, 1);
		p->next = L->next;

		L->next = p;

	}
}
	void CreateList_w(LinkList & L, int n) {
		L = new LNode;
		L->next = NULL;
		LinkList r;
		r = L;
		printf("请输入需要创建链表的值域:\n");
		for (int i = 0; i < n; i++) {
			p = new LNode;
			scanf_s("%c", &p->data, 1);
			r->next = p;
			r = p;
		}
		r->next = NULL;
	}
	
	void PrintList(LinkList &L){
		LinkList node = L->next;
		printf("表中的元素为:\n");
		while (node != NULL) {
			printf("%c  ", node->data);
			node = node->next;
		}
	}
	int main() {
		LinkList L;
		int x;
		char z;
		int i = 0;
		while (1) {
			printf("选出想要执行的功能其对应选项\n");
			printf("1.初始化链表L\n");
			printf("2.查询链表中i的值\n");
			printf("3.根据值查询链表中i的位置\n");
			printf("4.在i处插入一个值\n");
			printf("5.删除i的值\n");
			printf("6.头插法创建单链表\n");
			printf("7.尾插法创建单链表\n");
			printf("8.展示单链表\n");
			printf("9.关闭程序\n");
			scanf_s("%d", &i, 1);
			switch (i)
			{
			case 1:
				InitList(L);
				break;
				
			case 2:
				printf("请输入所要查询的值的位置:\n");
				scanf_s("%d", &x, 1);
				GetElem(L, x);
				PrintList(L);
				break;

			case 3:
				printf("请输入所要查询的值:\n");
				scanf_s("%c", &z, 1);
				LocateElem(L, z);
				PrintList(L);
				break;
			case 4:
				printf("请输入所要插入的值和插入的位置:\n");
				scanf_s("%d%c", &x, &z, 1, 1);
				InserElem(L,x,z);
				PrintList(L);
				break;
			case 5:
				printf("请输入所要删除的值的位置:\n");
				scanf_s("%d", &x, 1);
				ListDelete(L, x);
				PrintList(L);
				break;
			case 6:
				printf("请输入需要创建链表的长度:\n");
				scanf_s("%d", &x, 1);
				CreateList_h(L, x); 
				PrintList(L);
				break;
			case 7:
				printf("请输入需要创建链表的长度:\n");
					scanf_s("%d", &x, 1);
					CreateList_w(L, x);
					PrintList(L);
					break;
			case 8:
				PrintList(L);
				break;
			default:
				
				return OK;
			}
		}

	}
如果你也是初学者希望本篇文章对你有所帮助,程序有许多的缺陷,如果有不懂得地方希望评论出来 我们互相学习哈。![图片抱歉哈](https://img-blog.csdnimg.cn/20201122151955856.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81Mjc5NDYyMg==,size_16,color_FFFFFF,t_70#pic_center)