数据结构-朱战立-习题2算法设计题整理

2-14编写一个算法,逐个输出顺序表中所有数据元素。设数据元素的数据类型为int类型
代码来源

#include 
#include 
#include 
#define LONG 5//可以修改顺序表的长度
#define MAXSIZE 50
typedef int DataType;//定义元素类型为int
typedef struct
{
	DataType a[MAXSIZE];//最大存储单元个数
	int size;//当前存储单元个数
} Seqlist;//定义结构体seqlist结束
void listinitiate(Seqlist *L)//初始化顺序表L
{
	int i;
	L->size = 0;//定义初始数据元素个数为0;
	for(i=0;i<LONG;i++)
	{
		L->size++;
	}
}

void printlist(Seqlist *L)
{
	int i;
	srand(time(NULL));//使用随机函数生成顺序表元素
	printf("顺序表中的元素为: ");
	for(i=0;i<L->size;i++)
	{
		printf("%d ",rand()%10);//输出值
	}
	printf("\n"); 
}
int main()
{
    Seqlist aa;
	
	listinitiate(&aa);
    printlist(&aa);
	system("pause");
	return 0;
}

2-15 编写一个算法,逐个输出单链表中所有的数据元素。设数据元素的数据类型为int类
2-15代码来源

#include
#include
#include
typedef int dataType;
typedef struct node
{
    dataType data;      //数据域
    struct node *next;  //指针域
}Node;
void listInitiate(Node **head)            //双星指针,地址的地址,在初始化时,我们要使地址的值改变,所以使用双星作为参数传入
{
    *head = (Node*)malloc(sizeof(Node));  //为头结点分配位置空间(一个结点的大小)
    (*head)->next = NULL;                 //头结点指针域初始默认为空
}

void listBuildRear(Node *head,int n)//尾插法插入数据
{
    Node *p = head; //新增一个指针,用来代替head指针
	srand(time(NULL));//随机函数

    for(int i = 0;i < n;i++)                   //循环n次,每次循环都在链表尾部追加一个结点
    {
        Node *q = (Node*)malloc(sizeof(Node)); //新建立结点,并为之分配内存空间
        q->data = rand()%10;                    //将数据赋值给数据域
        q->next = NULL;                        //单链表最后一个结点的指针域都为空
        p->next = q;                           //将原始单链表最后一个结点指针域指向新结点q,从此q成为最后一个结点,原始最后一个结点变成倒数第二个结点
        p = q;                                 //p又指向当前链表最后一个结点,为下一次尾部插入做准备
    }
	printf("\n");
}
//遍历输出函数
void listPrint(Node *head)
{
    printf("单链表:");
    Node *p = head;                       //新增一个指针,用来代替head指针
    while (p->next != NULL)
    {
        printf("%d   ", p->next->data);
        p = p->next;                      //这一句不要忘了,不然会死循环的,我总是忘掉这一句
    }
}
//主函数
int main(void)
{
    Node node;         //声明单链表
    Node *p = &node;       //单链表指针指向单链表node
    listInitiate(&p);      //初始化单链表
    
    listBuildRear(p,10); //为单链表安排10个随机数据数进去
    listPrint(p); 
    system("pause");         //遍历输出单链表中的数据
    return 0;
}

2-16 线性表定位操作ListFind(L,x)的功能是:顺序表定位操作的功能是:在线性表L中查找是否存在的数据元素x,如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,回返-1。要求编写顺序表定位操作算法。
2-16代码来源

int ListFind(SeqList L,DataType x)
{
    int id=-1,i;
    for(i=0;i<L.size;i++) {
        if(L.list[i]==x) {
            id = i;
            break;
        }
    }
    return id;
}

2-17 设顺序表L中的数据元素递增有序,编写一个算法,将数据元素x插入顺序表L中的适当位置,以保持该顺序表的有序性。
2-17代码来源

2-18编写算法实现顺序表的就地逆置,即利用原顺序表的储存单元把数据元素序列a0,a1,…,an-1逆置为an-1,…,a1,a0
2-18代码来源

2-19在有些应用中,允许线性表中存在值相同的数据元素。线性表的另一个删除操作ListDeleteMore(L,x)的功能是:删除线性表L中所有等于x的数据元素。要求编写使用单链表时间上述功能的删除操作算法。
点击就送屠龙宝刀

2-20编写算法实现带头结点单链表head的就地逆置,即利用带头结点单链表head的结点空间把数据元素序列a0,a1,…,an-1逆置为an-1,…,a1,a0
2-20答案
代码分析

2-21 设带头结点的单链表L1和L2中分别存放着两个数据元素集合,编写算法判断集合L1是否是集合L2的子集,即判断集合L1中的数据元素是否都是集合L2中的数据元素
2-21答案
答案2
添加链接描述

2-22编写不带头结点单链表的插入操作和删除操作算法
(提示:要考虑在第一个数据元素结点前插入和删除第一个数据元素结点时与在其他位置插入和删除其他位置结点时的不同情况)
点一下点一下

2-23 百度文库

2-24强啊

2-25链接

2-26百度文库收费了

你可能感兴趣的:(转载,数据结构)