#include "StdAfx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
struct Node
{
DataType data;
struct Node *next;
};
typedef struct Node *PNode;
typedef struct Node *LinkList;
LinkList SetNullList_Link()
{
LinkList head = (LinkList)malloc(sizeof(struct Node));
if (head != NULL)
head->next = NULL;
else
printf("alloc failure");
return head;
}
int IsNull_Link(LinkList head)
{
return(head->next == NULL);
}
void CreateList_Head(struct Node *head)
{
PNode p = NULL;
int data;
printf("请输入整型数据建立链表,以-1结束\n");
scanf_s("%d", &data);
while (data != -1)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = data;
p->next = head->next;
head->next = p;
scanf_s("%d", &data);
}
}
void CreateList_Tail(struct Node *head)
{
struct Node *p = NULL;
struct Node *q = head;
int data;
printf("请输入整型数据建立链表,以-1结束\n");
scanf_s("%d", &data);
while (data != -1)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = data;
p->next = NULL;
q->next = p;
q = p;
scanf_s("%d", &data);
}
}
PNode Locate_Link(LinkList llist, DataType x)
{
PNode p;
if (llist == NULL) return NULL;
p = llist->next;
while (p != NULL&&p->data != x)
p = p->next;
return p;
}
int InsertPost_link(LinkList llist, PNode p, DataType x)
{
PNode q;
if (p == NULL) { printf("para failure!\n"); return 0; }
q = (PNode)malloc(sizeof(struct Node));
if (q == NULL)
{
printf("out of space!\n"); return 0;
}
else
{
q->data = x; q->next = p->next;
p->next = q; return 1;
}
}
int InsertPre_link(LinkList llist, PNode p, DataType x)
{
PNode pre = llist;
PNode q = NULL;
while (pre->next != p)
{
pre = pre->next;
}
q = (PNode)malloc(sizeof(struct Node));
q->data = x;
q->next = p;
pre->next = q;
return 1;
}
void DelValue_Link(LinkList head, int data)
{
struct Node* p = head->next;
struct Node* beforeP = head;
while (p != NULL)
{
if (p->data == data)
{
beforeP->next = p->next;
free(p); break;
}
else
{
beforeP = p; p = p->next;
}
}
}
void DelPostion_Link(LinkList head, PNode r)
{
PNode pre = head;
while (pre->next != r)
{
pre = pre->next;
}
pre->next = r->next;
free(r);
}
void DelPostionNext_Link(LinkList head, PNode r)
{
PNode p;
if (r->next) p = r->next;
r->next = p->next;
free(p);
}
void printLinkList(LinkList llist)
{
PNode p;
if (llist == NULL)
printf("\n The Linklist is NULL !\n");
p = llist->next;
while (p != NULL)
{
printf("%d", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
PNode p= SetNullList_Link();
LinkList List1 = SetNullList_Link();
CreateList_Tail(List1);
printLinkList(List1);
p = Locate_Link(List1, 5);
printf("The location of %d is %d\n", 5,p);
printf("5后面插入9:");
if (p == NULL)
{
printf("p is null!");
system("pause");
}
else
{
InsertPost_link(List1, p, 9);
printLinkList(List1);
}
printf("5前面插入9:");
if (p == NULL)
{
printf("p is null!");
system("pause");
}
else
{
InsertPre_link(List1, p, 9);
printLinkList(List1);
}
printf("在下标为2的位置添加元素8:");
int loc = 2;
int ptr = 0;
PNode q = List1->next;
while (q)
{
ptr = ptr + 1;
if (ptr == loc)
{
break;
}
q = q->next;
}
InsertPost_link(List1, q, 8);
printLinkList(List1);
printf("删除5后继元素:");
DelPostionNext_Link(List1, p);
printLinkList(List1);
printf("删除5:");
DelValue_Link(List1, 5);
printLinkList(List1);
system("pause");
}
typedef int DataType;
struct Node
{
DataType data;
struct Node *next;
};
typedef struct Node *PNode;
typedef struct Node *CLinkList;
CLinkList createListRearCircle()
{
PNode rear,s;
int x;
CLinkList head=(CLinkList)malloc(sizeof(struct Node));
head -> next=head;
rear=head;
printf("请输入整型数据建立链表,以-1结束\n");
scanf("%d",&x);
while(x!=-1)
{
s=(PNode)malloc(sizeof(struct Node));
s->data=x;
s->next=head;
rear->next=s;
rear=s;
scanf("%d",&x);
}
return rear;
}
LinkList Combine(LinkList ra, LinkList rb)
{
LinkList p = ra->next;
ra->next = rb->next->next;
free(rb->next);
rb->next = p;
return rb;
}
typedef int DataType;
typedef struct node
{
DataType data;
struct node *llink;
struct node *rlink;
}Dlnode;
typedef struct
{
Dlnode *first;
Dlnode *last;
}DlinkList;
DlinkList *dist;
void Del_DoubleList(DlinkList dlist,Dlnode *p)
{
p->llink->rlink=p->rlink;
p->rlink->llink=p->llink;
free(p);
}
void Insert_DoubleList(Dlnode *p)
{
Dlnode* s=(Dlnode*)malloc(sizeof(struct node));
s->llink=p;
s->rlink=p->rlink;
p->rlink->llink=s;
p->rlink=s;
}