数据结构线性链表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这是单链表的创建,取元素,添加,删除和销毁等功能实例:#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode;
typedef Lnode *LinkList;
Status InitList(LinkList &L)
{ Lnode *p;
p=(Lnode *)malloc(sizeof(Lnode));
if(p==NULL) return ERROR;
L=p;
L->next=NULL;
return OK;
}
Status CreatList(LinkList &L)
{ int i,len;
ElemType x;
LinkList p,q;
printf("input list length:");
scanf("%d",&len);
printf("\ninput list data:\n");
i=0; q=L;
while(i { p=(Lnode *)malloc(sizeof(Lnode)); scanf("%d",&x); p->data=x; q->next=p; q=p; i++; } q->next=NULL; return OK; } int ListLength(LinkList L) { int len=0; LinkList p; p=L->next; while(p) { len++; p=p->next;} return (len); } Status GetList(LinkList L,int i,ElemType &e) { int j; LinkList p; if(i<1) return ERROR; j=0; p=L; while(p->next!=NULL&&j { p=p->next; j++;} if(j==i) {e=p->data; return OK;} return ERROR; } Status InsertList(LinkList &L,int i,ElemType e) { int j; LinkList p,q; if(i<1) return ERROR; j=0; p=L; while(p->next!=NULL&&j { p=p->next; j++;} if(j==i-1) { q=(Lnode *)malloc(sizeof(Lnode)); q->data=e; q->next=p->next; p->next=q; return OK;} return ERROR; } Status DeleteList(LinkList &L,int i,ElemType &e) { int j; LinkList p,q; if(i<1) return ERROR; j=0; p=L; while(p->next!=NULL&&j { p=p->next; j++;} if(p->next==NULL) { return ERROR;} else { q=p->next; p->next=q->next; e=q->data; free(q); return OK;} } void PrintList(LinkList L) { LinkList p; p=L->next; printf("链表中的元素为:"); while(p){ printf("%4d",p->data); p=p->next; } printf("\n"); } void main() { ElemType i,e; LinkList L; InitList(L); CreatList(L); printf("输入要取元素的位置:"); scanf("%d",&i); GetList(L,i,e); printf("第%d个位置的元素是:%d\n",i,e); printf("输入要插入元素的位置及元素值:"); scanf("%d%d",&i,&e); InsertList(L,i,e); printf("已插入元素%d在第%d个位置!\n",e,i); PrintList(L); printf("输入要删除的位置:"); scanf("%d",&i); DeleteList(L,i,e); printf("已删除第%d个元素的位置%d!\n",i,e); PrintList(L); } 这是单链表中删除三个链表相同元素的实例: #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct Lnode{ ElemType data; struct Lnode *next; }Lnode; typedef Lnode* LinkList; void creatList(LinkList &L,int length) { int i; ElemType elem; LinkList p,s; L=(LinkList)malloc(sizeof(Lnode)); L->next=NULL; p=L; printf("请输入链表数据:"); for(i=0;i scanf("%d",&elem); s=(LinkList)malloc(sizeof(Lnode)); s->data=elem; p->next=s; p=s;