当前位置:文档之家› 建立顺序表与单链表,并进行定位、插入与删除操作。

建立顺序表与单链表,并进行定位、插入与删除操作。

实验内容与STEP

1、从键盘上输入十个数建立顺序表,并进行定位、插入与删除操作。
2、从键盘上输入五个数建立单链表,并进行定位、插入与删除操作。



#include
#include

#define MAXSIZE 100
typedef struct{
char elem[MAXSIZE]; //用于储存线性表中的元素,元素类型为char;
int len; //线性表的当前表长,即elem数组中已经储存多少个char.
}SqList;

int insert_Sq(SqList *L, int i, char c) //参数i:插入的位置(数组elem中的位置),参数c:要插入的值
{
if (i<1 || i>L->len+1) {
printf("\n插入位置不合理!");
return 0; //判断i的值,若小于1或者大于表长加1,则位置不合理
}
if (L->len == MAXSIZE-1) return -1; //若当前表长等于elem的最大储存量减1,则无法插入

for(int j = L->len; j >= i; --j)
{
L->elem[j+1] = L->elem[j]; //插入位置之后的元素依次后移,且应该先移动最后面的元素
}
L->elem[i] = c;
++L->len; //插入新元素后,当前表长应该加1
printf("您成功插入了:%c\n", c);
return 1;
}
int Delete_Sq(SqList *L, int i) //删除elem中位置为i的元素,若能够删除,则后面元素依次左移
{
if (i<1 || i>L->len) return 0; //不合理的位置,无法进行删除
if (L->len == 0) return -1; //线性表为空,无法进行删除
for (int j = i; j <= L->len-1; j++)
{
L->elem[j] = L->elem[j+1]; //从最前面一个元素开始依次左移,直到最后一位元素结束
}
--L->len; //被删除一个元素后,当前表长减1
return 1;
}

int PrintOut(SqList *L) //打印线性表中的元素
{
if (L->len == 0) return 0; //当前表长为0,所以线性表为空,不能做打印操作
printf("线性表中元素为:");
for (int j = 1; j < L->len; j ++) //j为循环变量,遍历数组0位置到L->Len-1这个位置,依次打印
{
printf("%c", L->elem[j]);
}
}

int main()
{
SqList *s = (SqList *)malloc(sizeof(SqList));
s->len = 0;
char love[] = " I love you!";
for(int i = 1; i < sizeof(love); i ++)
{
insert_Sq(s, i, love[i]);
}
PrintOut(s);
Delete_Sq(s, 8);
Delete_Sq(s, 8);
Delete_Sq(s, 8);
insert_Sq(s, 8, 'u');
PrintOut(s);
insert_Sq(s, 14, 'u');
free(s);
getchar();
return 0;
}


#include
#include
#define MAXSIZE 100
/*栈操作主要根据top来进行,事

实上规定top所指向的位置是没有值的*/
typedef struct
{
char elem[MAXSIZE]; //栈的最大容量为MAXSIZE
int top; //栈顶的值,即为elem数组中最后面的一个元素的位置
}SqStack;

void InitStack(SqStack *s)
{
s->top = 0; //当前top标记elem数组中0位置,说明栈为空
}
int Empty_Sq(SqStack *s) //判断栈是否为空
{
return (s->top == 0); //top为0,则返回true
}
int Push_Sq(SqStack *s, char c)
{
if (s->top == MAXSIZE)
{
printf("栈已满,不能做插入操作!");
return 0; //首先判断栈是否已满(当top标记为elem最后一个元素时)
}
s->elem[s->top] = c; //若栈没满,则将c放入当前top所指位置
s->top++; //然后top下移
printf("%c 成功进栈\n", c);
return 1;
}
int Pop_Sq(SqStack *s, char *y) //出栈操作,将top所指向的元素的下一位置的值保存在*y里
{
if(s->top == 0)
{
printf("栈为空,不能做出栈操作!");
return 0;
}
--s->top; //先让top指向它当前位置的前一个元素的位置
printf("当前元素 %d 出栈,它的值为 %c\n", s->top, s->elem[s->top]);
*y = s->elem[s->top]; //取出top现在指向的那个位置的元素,放入*y;即为出栈操作.

}
int main()
{
SqStack *s = (SqStack *)malloc(sizeof(SqStack));
InitStack(s); //初始化栈,让top为0;
char ch = 'c';
Push_Sq(s, 'a'); //连续三次进栈操作
Push_Sq(s, 'a');
Push_Sq(s, 'c');

Pop_Sq(s, &ch); //做一次出栈操作,数据保存在ch中
printf("%c", ch); //打印

Pop_Sq(s, &ch); //第二次出栈
printf("%c", ch);

Pop_Sq(s, &ch); //第三次出栈
printf("%c", ch);

Pop_Sq(s, &ch); //第四次出栈(当然这次会失败)
printf("%c", ch);
getchar();
return 0;
}


相关主题
文本预览
相关文档 最新文档