数据结构链表
//consts.h
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>
#include<limits.h>
#include<io.h>
#include<math.h>
#include<process.h>
#define TRUR 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1
//linklist.h
#ifndef MY_H_FILE
#define MY_H_FILE
#include"consts.h"
#endif
typedef char DataType;
typedef struct node
{
DataType data;
struct node *next;
}LinkedList;
//linklist.cpp
#ifndef MY_LCPP_FILE
#define MY_LCPP_FILE
#include"linklist.h"
#endif
void InitLlist(LinkedList *L)
{
L->next=NULL;
}
int GetLListLength(LinkedList *L)
{
LinkedList *p;
int j;
p=L->next;
j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
LinkedList *GetLListElem(LinkedList *L,int i)
{
int j;
LinkedList *p;
p=L;
j=0;
while((p->next!=NULL)&&(j<i))
{
p=p->next;
j++;
}
if(i=j)
{
return p;
}
else
return NULL;
}
LinkedList *LocateLListElem(LinkedList *L,DataType key)
{
LinkedList *p;
p=L->next;
while(p!=NULL)
{
if(p->data!=key)
{
p=p->next;
}
else
break;
}
return p;
}
int InsertLList(LinkedList *L,int i,DataType x)
{
LinkedList *pre,*s;
int k;
pre=L;
k=0;
while(pre!=NULL && k<i-1)
{
pre=pre->next;
k=k+1;
}
if(!pre)
{
printf("插入位置不合理");
return ERROR;
}
s=(LinkedList*)malloc(sizeof(LinkedList));
s->data=x;
s->next=pre->next;
pre->next=s;
return OK;
}
int DeleteLList(LinkedList *L,int i,DataType *e)
{
LinkedList *pre,*r;
int k;
pre=L;
k=0;
while(pre->next!=NULL && k<i-1)
{
pre=pre->next;
k++;
}
if(!(pre->next))
{
printf("删除的位置不合理");
return ERROR;
}
r=pre->next;
pre->next=pre->next->next;
*e=r->data;
free(r);
printf("成功删除结点");
return OK;
}
LinkedList *CreateLListR()
{
char ch;
LinkedList *head,*s,*r;
head=(LinkedList*)malloc(sizeof(LinkedList));
r=head;
ch=getchar();
while(ch!='$')
{
s=(LinkedList*)malloc(sizeof(LinkedList));
s->data=ch;
r->next=s;
r=s;
ch=getchar();
}
r->next=NULL;
return head;
}
void PrintLList(LinkedList *q)
{
LinkedList *p;
p=q->next;
printf("字符单链表结果是:\n");
while(p!=NULL)
{
printf("%5c",p->data);
p=p->next;
}
printf("\b\n");
}
int main()
{
LinkedList *a,*p;
int length,node,i,j;
char value,q;
printf("\t输入字符串,以$结束:\n");
a=CreateLListR();
PrintLList(a);
length=GetLListLength(a);
printf("该表长度为:%d\n",length);
printf("请输入取第几个结点:\n");
scanf("%d",&node);
p=GetLListElem(a,node);
if(p==NULL)
printf("表中没有该节点\n");
else
printf("该节点的数据域为:%c\n",p->data);
printf("请输入要插入的位置和值:\n");
scanf("%d",&i);
getchar();
scanf("%c",&value);
InsertLList(a,i,value);
PrintLList(a);
printf("请输入要删除的位置\n");
scanf("%d",&j);
DeleteLList(a,j,&q);
PrintLList(a);
return 0;
}