删除运算 DeleteList(L,i)
#include
#include
#define OK 1
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int last;
}Seqlist;
void InitList(Seqlist *L)
{
L=(Seqlist *)malloc(sizeof(Seqlist));
L->last=-1;
}
void CreatSeqList(Seqlist *L)
{
int i;
printf("创建顺序表,请输入5个表元素:");
L->last=0;
for(i=0;i<5;i++)
{
scanf("%d",&L->a[i]);
L->last++;
}
}
void OutputSeqList(Seqlist *L)
{
int i;
for( i=0;i
{
printf("%d ",L->a[i]);
}
}
int DeleteSeqList(Seqlist *L,int i)
{
int j;
if (i<1||i>L->last)
printf("Insert locate ERROR!");
else
{
for(j=i;j<=L->last;j++)
L->a[j-1]=L->a[j];
L->last--;
OutputSeqList(L);
}
return OK;
}
int main()
{
Seqlist L;
int i;
CreatSeqList( &L );
OutputSeqList( &L );
printf("请输入待删除的位置i:\n");
scanf("%d",&i);
DeleteSeqList( &L , i);
}
插入运算
int InsertSeqlist(Seqlist *L,int i,datatype x)
#include "stdio.h"
#include "malloc.h"
#define MAXSIZE 100
#define OK 1
typedef int datatype; //定义datatype的类型
typedef struct
{
datatype a[MAXSIZE];
int last;
}Seqlist; //定义一个结构体,名字就是Seqlist
void InitSeqlist(Seqlist *L) //初始化顺序表
{
L=(Seqlist *)malloc(sizeof(Seqlist)); //申请一块Seqlist类型的存储单元操作,并将其地址赋给变量L
L->last = -1;
}
void CreatSeqlist(Seqlist *L) //创建顺序表
{
int i;
L->last = 0;
printf("请输入5个数,创建顺序表:");
for(i = 0;i < 5;i++)
{
scanf("%d",&L->a[i]);
L->last++;
}
}
void OutputSeqlist(Seqlist *L) //输出顺序表
{
int i;
for(i = 0;i< L->last;i++)
printf("%d ",L->a[i]);
}
int InsertSeqlist(Seqlist *L,int i,datatype x) //把x插入到顺序表的i位置
{
int j;
if(L->last == MAXSIZE-1)
{
printf("表满\n");
return -1;
}
if(i<1 || i>L->last)
{
printf("位置错\n"); //检查插入位置的正确性
return 0;
}
{
for(j = L->last;j >= i-1;j--)
L->a[j+1] = L->a[j]; //结点后移
L->a[i-1] = x; //新元素插入
L->last++; //last仍然指向最后一个元素
OutputSeqlist(L);
}
return OK;
}
int main()
{
Seqlist L;
int i;
datatype x;
CreatSeqlist(&L);
OutputSeqlist(&L);
printf("\n请输入插入数的位置和值,i,x:");
scanf("%d %d",&i,&x);
InsertSeqlist(&L,i,x); //调用插入函数
}
#include
#include
#define MAXSIZE 100
#define N 6
typedef struct
{
int data [MAXSIZE];
int last;
}Seqlist;
void CreateSeqlist (Seqlist *L);
void OutSeqlist (Seqlist *L);
int LocationSeqlist (Seqlist *L , int x) // 在顺序表中查找x
{
int i = 0;
while (i <= L->last && L->data [i] != x)
i++;
if (i > L->last )
return -1;
else
return i;
}
int main (void)
{
int x , i;
Seqlist L;
CreateSeqlist (&L);
OutSeqlist (&L);
printf ("请输入查找的值x: \n");
scanf ("%d" , &x);
i = LocationSeqlist (&L , x);
printf ("%d is in data[%d]\n" , x , i);
return 0;
}
void CreateSeqlist (Seqlist *L)
{
int i;
L->last = 0;
printf ("请输入N个数创建顺序表: \n");
for (i = 0; i < N; i++)
{
scanf ("%d" , &L->data [i]);
L->last ++;
}
}
void OutSeqlist (Seqlist *L)
{
int i;
printf ("新建的顺序表是: \n");
for (i = 0; i < L->last ; i++)
printf ("%d " , L->data [i]);
printf ("\n");
}
例题2.1
#include "stdio.h"
#define N 7
void main()
{
int i,j;
int x,y;
int a[N];
printf("请输入7个数:");
for(i=0;i<7;i++)
scanf("%d",&a[i]);
x=a[0]; // 将基准置入x中
for(i=1;i
y=a[i];
for(j=i-1;j>=0;j--) //后移
a[j+1]=a[j];
a[0]=y;
}
printf("排序后的结果是:");
for(i=0;i
printf("\n");
}
例题2.2
有顺序表A和B,其元素均按从小到大的生序排列,编写一个算法将它们合并成一个顺序表C,
要求C的元素也是从大到小升序排列
#include "stdio.h"
#define M 6
#define N 4
#define Z 10
void main()
{
int i,j,k;
int a[M];
int b[N];
int c[Z];
printf("请输入a表的值:\n");
for(i=0;i
printf("\n请输入b表的值:\n");
for(i=0;i
i=0;j=0;k=0;
while(i
if(a[i]c[k++]=a[i++]; //比较a,b二个表中数据的大小,把较小的数据送给c表。
else
c[k++]=b[j++];
while(i
while(j
printf("\n新生成的c表是:\n");
for(i=0;i
printf("\n");
}
例题 2.3
#include "stdio.h"
#define m 4
#define n 6
void main()
{
char a[m];
char b[n];
char as[m];
char bs[n];
int i,j;
int ms=0,ns=0;
printf("请输入一些字符生成a表:\n");
for(i=0;i
printf("\n请输入一些字符生成b表:\n");
for(j=0;j
i=0;
while(a[i]==b[i])
i++;
for(j=i;j
{
as[j-1]=a[j];
ms++;
}
for(j=i;j
bs[j-1]=b[j];
ns++;
}
if(ms==ns&&ns==0)
printf("空表");
else if(ms==0&&ns>0 || ms>0&&ns>0&& as[0]
printf("a>b");
}
头部插入建立单链表(和书上稍有不同)
#include "stdio.h"
#include "malloc.h"
typedef struct node
{
int data;
struct node *next;
};
void main()
{
struct node *s,*H=NULL;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(struct node*)malloc(sizeof(node));
s->data=x;
s->next=H;
H=s;
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
while(H!=NULL)
{
printf(" %d ",H->data);
H=H->next;
}
printf("\n");
}
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;//定义一个结构体,名字是Lnode,LinkList是指向Lnodede指针类型
void main()
{
LinkList L=NULL;//空表
Lnode *s;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));//申请一个Lnode类型的存储单元,并将其地址赋给变量s.
s->data=x;
s->next=L;
L=s;
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
while(L!=NULL)
{
printf(" %d ",L->data);//输出单链表
L=L->next;
}
printf("\n");
}
尾部插入建立单链表
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;//定义一个结构体,名字是Lnode,LinkList是指向Lnodede指针类型
void main()
{
LinkList L=NULL;//空表
Lnode *s,*r=NULL;
int x;
printf("请输入一些数:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));//申请一个Lnode类型的存储单元,并将其地址赋给变量s
s->data=x;
if(L==NULL)
L=s; //第一个结点的处理
else
r->next=s; //其他结点的处理
r=s; //r指向新的尾结点
scanf("%d",&x);
}
printf(" \n*********生成的单链表是**********: \n");
if(r!=NULL)
r->next=NULL;
while(L!=NULL)
{
printf(" %d ",L->data); //输出单链表
L=L->next;
}
printf("\n");
}
求单链表的长度
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *s,*r=NULL;
int x;
int count=0;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
printf("\n***新建的单链表是***:\n");
r=L;
while(r!=NULL)
{
printf("%d ",r->data );
r=r->next;
count++;
}
printf("\n单链表的长度是%d\n",count);
}
按序号查找
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,i;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
printf("\n请输入i的值:\n");
scanf("%d",&i);
p=L;
while(p->next !=NULL&&j{
p=p->next;
j++;
}
if(j==i)
printf("第%d个结点的值是%d\n",i,p->data);
else
printf("NOT FOUND\n");
}
按值查找
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,y;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
printf("\n请输入y的值: ");
scanf("%d",&y);
p=L;
while(p->next !=NULL&&p->data!=y)
{
p=p->next;
j++;
}
if(p->next!=NULL)
printf("%d在单链表的%d位置\n",y,j);
else
printf("NOT FOUND\n");
}
插入结点(后插)
#include "stdio.h"
#include "malloc.h"
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}Lnode,*LinkList;
void main()
{
LinkList L=NULL;
struct node *p,*s,*r=NULL;
int x;
int j=1,locate;
printf("******请输入一些数建立单链表******:\n");
scanf("%d",&x);
while(x!=0)
{
s=(Lnode*)malloc(sizeof(Lnode));
s->data=x;
s->next =NULL;
if(L==NULL)
L=s;
else
r->next=s;
r=s;
scanf("%d",&x);
}
printf("请输入待插的数的位置:");
scanf("%d",&locate);
p=L;
while(p->next !=NULL&&j!=locate)
{
p=p->next ;
j++;
}
if(p==NULL)
printf("插入位置错误:");
else
{
s=(Lnode*)malloc(sizeof(Lnode));
printf("请输入待插入数的值:");
scanf("%d",&s->data);
s->next =p->next ;
p->next =s;
}
p=L;
while(p!=NULL)
{
printf("%3d",p->data );
p=p->next ;
}
printf("\n");
}