#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node * pNext;
}* PNODE, NODE;
PNODE create_list();
void traverse_list(PNODE);
bool is_empty(PNODE);
int length_list(PNODE);
bool insert_list(PNODE, int, int);
bool delete_list(PNODE, int, int *);
void sort_list(PNODE);
bool find(PNODE, int);
void deleteList(PNODE);
int main()
{
PNODE pHead = NULL;
int pos, val;
pHead = create_list();
traverse_list(pHead);
if(is_empty(pHead))
printf("链表为空!\n");
else
printf("链表不空!\n");
printf("链表长度为:%d\n", length_list(pHead));
traverse_list(pHead);
deleteList(pHead);
traverse_list(pHead);
return 0;
}
PNODE create_list()
{
int len;
int i, val;
PNODE pHead = (PNODE) malloc(sizeof(NODE));
if(pHead == NULL)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
printf("请输入您需要生成的链表节点的个数:len = ");
scanf("%d", &len);
for(i = 0 ; i < len; i++)
{
printf("请输入第%d个节点的值:", i);
scanf("%d", &val);
PNODE pNew = (PNODE) malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("分配失败,程序终止!\n");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
if(p == NULL)
{
printf("链表为空\n");
return ;
}
while(p != NULL)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n");
}
bool is_empty(PNODE pHead)
{
if(pHead->pNext == NULL)
return true;
else
return false;
}
int length_list(PNODE pHead)
{
int cnt = 0;
while(pHead->pNext != NULL)
{
cnt++;
pHead = pHead->pNext;
}
return cnt;
}
void sort_list(PNODE pHead)
{
int i, j, t, len;
PNODE p, q;
len = length_list(pHead);
for(i = 0, p = pHead->pNext; i < len - 1; ++i, p = p->pNext)
for(j = i + 1, q = p->pNext; j < len; ++j, q = q->pNext)
{
if(p->data > q->data)
{
t = p->data;
p->data = q->data;
q->data = t;
}
}
return;
}
bool insert_list(PNODE pHead, int pos, int val)
{
int i = 0;
PNODE p = pHead;
while(p != NULL && i < pos - 1)
{
p = p->pNext;
++i;
}
if(i > pos - 1 || p == NULL)
return false;
PNODE pNew = (PNODE) malloc(sizeof(NODE));
if(pNew == NULL)
{
printf("动态分配内存失败\n");
exit(-1);
}
pNew->data = val;
PNODE q = p->pNext;
p->pNext = pNew;
pNew->pNext = q;
return true;
}
bool delete_list(PNODE pHead, int pos, int * pVal)
{
int i = 0;
PNODE p = pHead;
while(p->pNext != NULL && i < pos - 1)
{
p = p->pNext;
++i;
}
if(i > pos - 1 || p->pNext == NULL)
return false;
PNODE q = p->pNext;
*pVal = q->data;
p->pNext = p->pNext->pNext;
free(q);
q = NULL;
return true;
}
bool find(PNODE pHead, int val)
{
PNODE p;
p = pHead->pNext;
while(p != NULL && p->data != val)
p = p->pNext;
if(p == NULL)
{
free(p);
return false;
}
else
{
free(p);
return true;
}
}
void deleteList(PNODE pHead)
{
PNODE p, Tmp = NULL;
p = pHead->pNext;
while(p != NULL)
{
Tmp = p->pNext;
free(p);
p = Tmp;
}
pHead->pNext = NULL;
}
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int ElemType;
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}LNode, *LinkList;
void CreateList_Head(LinkList L, int n) {
L->next = NULL;
for (int i = 0; i < n; i++)
{
LNode *p = (LNode *)malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = L->next;
L->next = p;
}
}
void CreateList_R(LinkList L, int n)
{
LinkList q = L;
while(q->next)
q = q->next;
for(int i = 0; i < n; i++)
{
LNode *p = (LNode *) malloc(sizeof(LNode));
scanf("%d", &(p->data));
p->next = NULL;
q->next = p;
q = p;
}
}
void Traverse(LinkList L)
{
if(L == NULL)
{
printf("链表不存在\n");
return ;
}
LinkList q = L->next;
int i = 1;
if(q == NULL)
{
printf("链表为空\n");
return ;
}
while(q != NULL)
{
printf("%d-----data:%d\n", i, q->data);
i++;
q = q->next;
}
}
Status InitList_L(LinkList *L)
{
*L = (LinkList) malloc(sizeof(LNode));
if(*L == NULL)
{
printf("内部不足,空间分配失败\n");
return ERROR;
}
(*L)->next = NULL;
return OK;
}
Status DestroyList_L(LinkList *L)
{
LinkList p, tmp;
p = (*L)->next;
*L = NULL;
while(p)
{
tmp = p;
p = p->next;
free(tmp);
}
return OK;
}
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 ListLength_L(LinkList L)
{
int i = 0;
LinkList p = L->next;
while(p)
{
i++;
p = p->next;
}
return i;
}
Status GetElem_L(LinkList L, int i, ElemType *e)
{
LinkList 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;
}
LNode *LocateElem_L(LinkList L, ElemType e)
{
LinkList p = L->next;
while(p && p->data != e)
p = p->next;
return p;
}
Status LinkInsert_L(LinkList L, int i, ElemType e)
{
LinkList p = L, q;
int j = 0;
while(p && j < i - 1)
{
p = p->next;
j++;
}
if(!p || j > i - 1) return ERROR;
q = (LinkList) malloc(sizeof(LNode));
q->data = e;
q->next = p->next;
p->next = q;
return OK;
}
int main()
{
LinkList L = NULL, p = NULL;
InitList_L(&L);
CreateList_Head(L, 3);
CreateList_R(L, 3);
Traverse(L);
return 0;
}
参考:数据结构与算法基础(青岛大学-王卓)