大概寫了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
運行結果如下: