前段时间用C++做的
#include
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ERROR 0
#define OK 1
typedef int ElemType;
struct LNODE
{
ElemType data;
struct LNODE *next;
};
typedef struct LNODE LNode;
typedef struct LNODE *LinkList;
//初始化单链表
int init(LinkList &L)
{
L=(LNode *)malloc(sizeof(LNode));
if(!L) return(ERROR);
L->next=NULL;
return OK;
}/*init */
//求表长
int ListLength(LinkList L)
{
int j=0;
while (L->next)
{
L=L->next;
j++;
}
return j;
}
//获取表中第i个元素的值
int GetElem(LinkList L,int i,ElemType &e)
{
LinkList p; int j;
p=L->next;j=1;
while(p&&j {
p=p->next;++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
//判断元素e是否在该链表中
int LocateElem(LinkList La,ElemType e)
{
LinkList p;
p=La;
int i=0;
while(p->next)
{
p=p->next;
i++;
if(p->data==e)
return i;
}
return 0;
}
//打印表中元素值
void PrintList(LinkList L)
{
LinkList p;
p=L;
while(p->next)
{
p=p->next;
cout<
cout<
//插入操作
int ListInsert(LinkList &L,int i,ElemType e)
{
LinkList p,s;
int j;
p=L;j=0;
while(p&&j {
p=p->next;
++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}/*ListInsert Before i */
//删除操作
int ListDelete(LinkList &L,int i,ElemType &e)
{
LinkList p,q;
int j;
p=L;j=0;
while(p&&j
p=p->next;
++j;
}
if(!p||j>i) return ERROR;
q=p->next;
p->next=p->next->next;
e=q->data;
free(q);
return OK;
}
// 头插法建表
int CreateList(LinkList &L,int n)
{
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
if(!L) return ERROR;
L->next=NULL;
for(int i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
if(!p) return ERROR;
cin>>p->data;
p->next=L->next;L->next=p;
}
return OK;
}
//合并两个有序表
void MergeList(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next;pb=Lb->next;
Lc=pc=La;
while(pa && pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else
{
pc->next=pb;pc=pb;pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}
void main()
{
LinkList La,Lb,Lc;
ElemType e;
cout<<"\n\n-------------------List Demo is running...----------------\n\n";
cout<<"First is InsertList function.\n";
init(La);
int n;
cout<<"请输入La表中元素个数:";
cin>>n;
cout<
PrintList(La);
cout<<"La的表长为:"<
cout<<"取第i位元素的值:\n请输入位序:";
cin>>n;
GetElem(La,n,e);
cout<
cout<<"定位操作:\n请输入要查找的元素:";
cin>>e;
cout<
cout<<"删除操作:\n输入要删除元素的位序:";
cin>>n;
ListDelete(La,n,e);
cout<<"\n要删除的元素值为:"<
PrintList(La);
init(Lb);
cout<<"请输入Lb表中元素个数:";
cin>>n;
cout<
PrintList(Lb);
cout<<"Lb的表长为:"<
MergeList(La,Lb,Lc);
PrintList(Lc);
getch();
}
#include
#include
typedef struct node{
char a;
struct node *next;
}NODE;
NODE *head;
NODE *insertNode(int n)
{
NODE *p, *q;
p = (NODE*)malloc(sizeof(NODE));
p ->a = n;
p ->next = NULL;
if(head == NULL)
{
head = p;
}
else
{
for(q = head; q ->next; q = q ->next);
q ->next = p;
}
return head;
}
main()
{
int n;
NODE *p;
head = NULL;
printf("Please Enter number:\n");
while(scanf("%d",&n)){
printf("Please Enter number:\n");
flushall();
head = insertNode(n);
}
for(p = head; p; p = p ->next)
printf("%d\n",p ->a);
free(head);
}
刚刚编写的,调试过了。在VC6里
typedef char DataType;
typedef struct node
{
DataType data;
node *next;
}ListNode;
typedef ListNode* LinkList;
void InsertList(LinkList head, DataType x,int i)
{
int j=0;
ListNode *p;
p=head;
while(p->next && j {
p=p->next;
j++;
}
if(i == j)
{
if(p == NULL)
Error("position error");
ListNode *s=(ListNode*)malloc(sizeof(ListNode));
s->data=x;
s->next=p->next;
p->next=s;
}
else
Error("插入位置错误");
}