#include<iostream>
#include<time.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
using namespace std;
typedef int ElemType;
typedef int Status;
typedef struct Node {
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList; //LinkList L;相当于Node *L;
//线性链表L已存在,用e返回L中第i个数据元素的值
Status GetElem(LinkList L, int i, ElemType *e)
{
int j;
LinkList p;
p = L->next; //让p指向链表L的第一个结点
j = 1;
while (p&&j < i) {
p = p->next;
++j;
}
if (!p || j>i)
return ERROR;
*e = p->data;
return OK;
}
//线性链表L已存在,在L中第i个位置之前插入新的数据元素e,L的长度加1
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j;
LinkList p, s;
p = *L;
j = 1;
while (p&&j < 1) {
p = p->next;
++j;
}
if (!p || j>1)
return ERROR;
s = (LinkList)malloc(sizeof(Node)); //生成新结点
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
//线性链表L已存在,删除L中第i个数据元素,并用e返回其值,L的长度减1
Status ListDelete(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;
p = *L;
j = 1;
while (p->next&&j < 1) {
p = p->next;
++j;
}
if (!(p->next) || j>1)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
//随机产生n个元素的值,建立带有表头结点的单链线性表L(头插法)
void CreateListHead(LinkList *L, int n)
{
LinkList p;
int i;
srand(time(0)); //初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));//先建立一个带头结点的单链表
(*L)->next = NULL;
for (i = 0; i < n; ++i) {
p = (LinkList)malloc(sizeof(Node));//生成新结点
p->data = rand() % 100 + 1;
p->next = (*L)->next;
(*L)->next = p;
}
}
//随机产生n个元素的值,建立带有表头结点的单链线性表L(尾插法)
void CreateListTail(LinkList *L, int n)
{
LinkList p, r;
int i;
srand(time(0));
*L = (LinkList)malloc(sizeof(Node));
r = *L; //r为指向尾部的结点
for (i = 0; i < n; ++i) {
p = (LinkList)malloc(sizeof(Node)); //生成新结点
p->data = rand() % 100 + 1;
r->next = p;
r = p;
}
r->next = NULL;
}
//将线性链表L重置为空表
Status ClearList(LinkList *L)
{
LinkList p, q;
p = (*L)->next;
while (p) {
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
int main()
{
LinkList list;
CreateListHead(&list,10);
ListInsert(&list, 1, 1);
LinkList p;
p = list->next;
for (int i = 0; i < 11; ++i) {
cout << p->data << ' ';
p = p->next;
}
cout << endl;
return 0;
}
单链表的各项操作
最新推荐文章于 2022-05-03 22:36:21 发布