数据结构-单链表
2015-02-02 19:56
232 查看
#include<stdio.h>
#include<stdlib.h>
#define LIST_SIZE 100
#define LISTINCREMENT 100
typedef int ElemType;
typedef int Status;
#define OVERFLOW 0
#define OK 1
#define ERROR 0
typedef struct LNode
{
ElemType data; // 数据域
struct LNode *next; // 指针域
}LNode, *LinkList;
LinkList L, p, q, s;
void CreateList_L(LinkList &L, int n)
{ // 逆序输入 n 个数据元素,建立带头结点的单链表
//LinkList p;
L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
for (int i = n; i > 0; --i)
{
// LinkList p;
p = (LinkList) malloc (sizeof (LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
} // CreateList_L
Status ListInsert_L(LinkList &L, int i, ElemType e)
{
//LinkList q;
q = L;
int j = 0;
while (q && j < i-1)
{
q = q->next;
++j;
} // 寻找第 i-1 个结点
if (!q || j > i-1) return ERROR;
//LinkList s;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = q->next;
q->next = s;
return OK;
}
/*
Status ListDelete_L(LinkList &L,int i, ElemType &e)
{
LinkList p;
LinkList q;
p = L;
j = 0;
while ( p->next && j < i-1)
{
p = p->next;
++j;
} // 寻找第 i 个结点,并令 p 指向其前趋
if (!(p->next) || j>i-1)
return ERROR;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return OK;
} // ListDelete_L
*/
int main()
{
int n;
// LinkList L;
while(~scanf("%d",&n))
{
CreateList_L(L, n);
p = L->next;
printf("chu shi biao:\n");
while (p)
{
printf("%d ",p->data );
p = p->next;
}
printf("\n");
printf("Please input where you insert and what:\n");
int ins, siz;
scanf("%d%d",&ins, &siz);
printf("After insert:\n");
ListInsert_L(L, ins, siz);
p = L->next;
while (p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
/*
printf("chu shi biao:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
printf("Please input where you insert and what:\n");
int ins, siz;
scanf("%d%d",&ins, &siz);
printf("After insert:\n");
ListInsert_Sq(L, ins, siz);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
printf("Please input where you want to delete:\n");
int del;
scanf("%d",&del);
printf("After delete :\n");
int e;
ListDelete_Sq(L, del, e);
printf("%d\n",e);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
*/
}
return 0;
}
#include<stdlib.h>
#define LIST_SIZE 100
#define LISTINCREMENT 100
typedef int ElemType;
typedef int Status;
#define OVERFLOW 0
#define OK 1
#define ERROR 0
typedef struct LNode
{
ElemType data; // 数据域
struct LNode *next; // 指针域
}LNode, *LinkList;
LinkList L, p, q, s;
void CreateList_L(LinkList &L, int n)
{ // 逆序输入 n 个数据元素,建立带头结点的单链表
//LinkList p;
L = (LinkList) malloc (sizeof (LNode));
L->next = NULL;
for (int i = n; i > 0; --i)
{
// LinkList p;
p = (LinkList) malloc (sizeof (LNode));
scanf("%d",&p->data);
p->next = L->next;
L->next = p;
}
} // CreateList_L
Status ListInsert_L(LinkList &L, int i, ElemType e)
{
//LinkList q;
q = L;
int j = 0;
while (q && j < i-1)
{
q = q->next;
++j;
} // 寻找第 i-1 个结点
if (!q || j > i-1) return ERROR;
//LinkList s;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = q->next;
q->next = s;
return OK;
}
/*
Status ListDelete_L(LinkList &L,int i, ElemType &e)
{
LinkList p;
LinkList q;
p = L;
j = 0;
while ( p->next && j < i-1)
{
p = p->next;
++j;
} // 寻找第 i 个结点,并令 p 指向其前趋
if (!(p->next) || j>i-1)
return ERROR;
q = p->next;
p->next = q->next;
e = q->data;
free(q);
return OK;
} // ListDelete_L
*/
int main()
{
int n;
// LinkList L;
while(~scanf("%d",&n))
{
CreateList_L(L, n);
p = L->next;
printf("chu shi biao:\n");
while (p)
{
printf("%d ",p->data );
p = p->next;
}
printf("\n");
printf("Please input where you insert and what:\n");
int ins, siz;
scanf("%d%d",&ins, &siz);
printf("After insert:\n");
ListInsert_L(L, ins, siz);
p = L->next;
while (p)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
/*
printf("chu shi biao:\n");
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
printf("Please input where you insert and what:\n");
int ins, siz;
scanf("%d%d",&ins, &siz);
printf("After insert:\n");
ListInsert_Sq(L, ins, siz);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
printf("Please input where you want to delete:\n");
int del;
scanf("%d",&del);
printf("After delete :\n");
int e;
ListDelete_Sq(L, del, e);
printf("%d\n",e);
for(i=0;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
*/
}
return 0;
}
相关文章推荐
- 成人版java数据结构之单链表I建立和遍历
- java数据结构之单链表
- 数据结构(殷人琨版)学习笔记之单链表
- 二、数据结构基础之单链表C语言实现
- 数据结构基础系列——单链表的实现
- 数据结构-单链表的实现
- 【学习点滴-数据结构-单链表】单链表的就地逆置
- 数据结构之单链表
- 常用数据结构1——单链表(单链表的创建、)
- 数据结构:单链表的实现与Joseph环
- 数据结构实现单链表
- 数据结构之单链表反转
- 数据结构——单链表的基本操作
- 数据结构之单链表
- 数据结构——单链表的操作
- 成人版java数据结构之单链表II删除
- 数据结构之单链表
- 数据结构之单链表
- 数据结构之单链表(C++实现)
- 【学习点滴-数据结构-单链表】单链表的建立,遍历及有序单链表合并