數據結構 C語言 實現單鏈表的各種基本操作

大概寫了150多行,都是很基礎的操作。需要的自取。
(書籍爲數據結構教程(第五版)李春葆)

實驗內容

實驗三 鏈表基本操作的實現

【實驗目的】
1.掌握線性表的鏈式存儲表示。
2.掌握單鏈表的基本操作,包括創建、查找、插入和刪除等算法。
【實驗內容】
編寫程序linklist.cpp,實現單鏈表的各種基本運算(假設單鏈表的元素類型爲char),並在此基礎上設計主程序main.cpp,完成如下功能:
1.初始化單鏈表;
2.依次採用尾插法插入元素a,b,c,d,e;
3.輸出單鏈表;
4.判斷單鏈表的長度;
5.判斷單鏈表是否爲空;
6.輸出單鏈表的第3個元素;
7.輸出元素a的位置;
8.在第4個元素位置插入元素f;
9.輸出單鏈表;
10.刪除單鏈表的第3個元素;
11.輸出單鏈表;
12.釋放單鏈表。

#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode {		//定義單鏈表結點類型
	ElemType data;
	struct LNode *next;
} LinkNode;

void CreateListR(LinkNode*&L,ElemType a[],int n) { //用尾插法創建單鏈表
	LinkNode *s,*r;
	L=(LinkNode*)malloc(sizeof(LinkNode));
	r=L;
	for(int i=0; i<n; i++) {
		s=(LinkNode*)malloc(sizeof(LinkNode));
		s->data=a[i];
		r->next=s;
		r=s;
	}
	r->next=NULL;
}
void InitList(LinkNode*&L) {       //初始化線性表
	L=(LinkNode*)malloc(sizeof(LinkNode));
	L->next=NULL;
}

bool ListInsert(LinkNode*&L,int i,ElemType e) { //插入元素
	int j=0;
	LinkNode*p=L,*s;
	if(i<0) return false;
	while(j<i-1&&p!=NULL) {
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else {
		s=(LinkNode*)malloc(sizeof(LinkNode));
		s->data=e;
		s->next=p->next;
		p->next=s;
		return true;
	}
}

void DispList(LinkNode*L) { //輸出單鏈表
	LinkNode*p=L->next;
	while(p!=NULL) {
		printf("%c",p->data);
		p=p->next;
	}
}

int ListLength(LinkNode*L) { //輸出單鏈表長度
	int n=0;
	LinkNode*p=L;
	while(p->next!=NULL) {
		n++;
		p=p->next;
	}
	return(n);
}

bool ListEmpty(LinkNode*L) {//判斷是否爲空
	return (L->next==NULL);
}

int LocateElem(LinkNode*L,ElemType e) {//按元素查找地址
	int i=1;
	LinkNode*p=L->next;
	while(p!=NULL&&p->data!=e) {
		p=p->next;
		i++;
	}
	if(p==NULL)
		return(0);
	else return(1);
}


bool GetElem(LinkNode*L,int i,ElemType&e) { //查找元素
	int j;
	LinkNode*p=L;
	if(i<0) return false;
	while(j<i&&p!=NULL) {
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else {
		e=p->data;
		return true;
	}
}

bool ListDelete(LinkNode*&L,int i,ElemType&e) {
	int j=0;
	LinkNode*p=L,*q;
	if(i<=0)return false;
	while(j<i-1&&p!=NULL) {
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else {
		q=p->next;
		if(p==NULL)
			return false;
		e=q->data;
		p->next=q->next;
		free(q);
		return true;
	}
}

void DestoryList(LinkNode*&L) {
	LinkNode*pre=L,*p=L->next;
	while(p!=NULL) {
		free(pre);
		pre=p;
		p=pre->next;
	}
	free(pre);
}
int main() {
	LinkNode *L;
	ElemType e;
	InitList(L);
	printf("1.初始化單鏈表表\n");
	printf("2.依次插入元素a,b,c,d,e\n");
	ListInsert(L,1,'a');
	ListInsert(L,2,'b');
	ListInsert(L,3,'c');
	ListInsert(L,4,'d');
	ListInsert(L,5,'e');
	printf("3.輸出單鏈表L:\n");
	DispList(L);
	printf("\n");
	printf("4.輸出單鏈表長度:%d\n",ListLength(L));
	printf("5.單鏈表是否爲空:",ListEmpty(L));
	printf("該單鏈表不爲空\n");
	printf("6.第三個元素是:");
	GetElem(L,3,e);
	printf("%c\n",e);
	printf("7.元素a的位置是:%d\n",LocateElem(L,'a'));
	printf("8.在第4個元素位置插入元素f:\n");
	ListInsert(L,4,'f');
	DispList(L);
	printf("9.刪除單鏈表的第3個元素:");
	ListDelete(L,3,e);
	DispList(L);
	printf("\n");
	printf("12.釋放單鏈表\n");
}

編譯器爲DEV C++(先裝英文語言,在第一次打開的時候可以調整爲簡體中文),鏈接:鏈接:https://pan.baidu.com/s/1KSojz3K-HLI9ePlCT4Fecg
提取碼:mmk8
運行結果如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章